const的目的是什么?
const Object myFunc(){
return myObject;
}
Run Code Online (Sandbox Code Playgroud)
我刚刚开始阅读Effective C++,而第3项提倡这一点,Google搜索也提出了类似的建议,但也有反作用.我看不出在这里使用const会更好.假设需要按值返回,我认为没有任何理由保护返回的值.给出为什么这可能有用的示例是防止返回值的意外bool强制转换.实际问题是应该使用explicit关键字来防止隐式bool强制转换.
在这里使用const可以防止在没有赋值的情 所以我无法用这些对象执行算术表达式.似乎没有一个未命名的const有用的情况.
在这里使用const获得了什么,何时更可取?
编辑:将算术示例更改为修改在分配之前可能要执行的对象的任何函数.
我已经阅读了关于C++中const-correctness的所有建议,并且它(部分)很重要,因为它有助于编译器优化代码.我从未见过的是关于编译器如何使用这些信息来优化代码的一个很好的解释,甚至连好书都没有解释幕后发生的事情.
例如,编译器如何优化声明为const的方法与不应该但应该是的方法.当你引入可变变量时会发生什么?它们会影响const方法的这些优化吗?
请考虑下面的代码,特别是观察get_length返回const size_t.
#include <stdio.h>
const size_t get_length(void)
{
return 123;
}
void foo(void)
{
size_t length = get_length();
length++;
printf("Length #1 is %zu\n", length);
}
void bar(void)
{
// Still 123 because length was copied from get_length
// (copy ellision notwithstanding, which is not the point here)
size_t length = get_length();
printf("Length #2 is %zu\n", length);
}
int main(void) {
foo();
bar();
}
Run Code Online (Sandbox Code Playgroud)
输出:
Length #1 is 124
Length #2 is 123
Run Code Online (Sandbox Code Playgroud)
我从 clang-tidy 收到以下警告:
Clang-Tidy: …Run Code Online (Sandbox Code Playgroud)