直接在代码中表达想法 - 定义是什么意思?

Expressing ideas directly in code - what does the definition mean?

提问人:Johnathon 提问时间:8/19/2022 更新时间:8/19/2022 访问量:87

问:

我是 c++ 的新手,我正在阅读核心指南,我遇到了这个:

P.1:直接在代码中表达想法

在这里,它说使用类似的东西来代替Month month() const;int month();

所以我有 2 个问题,为什么函数末尾有一个常量,这有什么作用?月份是如何定义的?你能用任何名称而不是 int、double、float 等名称声明新函数吗?

提前致谢

C++ CPP 核心指南

评论

7赞 PaulMcKenzie 8/19/2022
也许在阅读核心指南之前,您应该先从基础知识开始。你提出的问题在任何一本好的 C++ 书中都有介绍。
1赞 Eljay 8/19/2022
表示该方法承诺不更改对象的状态。月份可以定义为constenum class Month : int {};
1赞 user4581301 8/19/2022
只有当函数是类的成员时,尾随才有意义,在这种情况下,它是编译器强制执行的承诺(即,如果函数尝试更改实例,程序将不会编译),即函数不会修改调用函数的类实例。constconst
1赞 user4581301 8/19/2022
剩下的我们只能猜测。可能是因为很多事情。
2赞 user4581301 8/19/2022
旁注:权威的 C++ 书籍指南和列表

答:

6赞 Nicol Bolas 8/19/2022 #1

该指南的要点在于它所说的:将界面背后的想法放在代码本身中。

如果您有某种日期类型,并且它有一个成员函数,则表示您可以从该日期检索一个月的想法。据推测,返回的值表示在该日期内存储的一年中的月份。int month();int

但。。。它如何代表月份?它是一个整数。一月份是否像(大多数语言)的长期程序员所期望的那样,给出整数 0?或者也许它被赋予整数 1,因为这就是日期的实际写法?代码本身对此只字未提;您必须查看该函数的文档才能找到答案。所以如果你看到,你不知道代码是在询问是 1 月还是 2 月。if(date.month() == 1)

另一种方法是返回类型 。现在,没有指定该类型是什么。无论它是什么,该类型都可以明确“一月”所代表的值。例如:Month month() const;Month

enum class Month { January, February, ...};

“一月”是如何编码的?通过枚举值。因此,如果您看到 测试 ,那么它到底在说什么就很清楚了。它不仅毫不含糊,而且读起来几乎和英语一模一样:日期的月份是一月份。Month::Januaryif(data.month() == Month::January)

这就是在代码中表达一个想法的含义:整个想法都由代码明确地表达出来。让代码说出它在做什么,而不是它是如何做的。