我还在学习C++,我到处都在阅读,我必须尽可能地使用const它(出于速度原因,我认为).
我经常写这样的getter方法:
const bool isReady() {
return ready;
}
Run Code Online (Sandbox Code Playgroud)
但我已经看到一些IDE以这种方式自动生成getter:
bool getReady() const {
return ready;
}
Run Code Online (Sandbox Code Playgroud)
但是,写代表,如果const在函数之后,我发现这个错误:
member function 'isReady' not viable: 'this' argument has type 'const VideoReader', but function is not marked const
Run Code Online (Sandbox Code Playgroud)
那么,编写const getter的更好方法是什么?我真的要关心吗?
mka*_*aes 43
这两种方式之间存在巨大差异.
const bool isReady()
Run Code Online (Sandbox Code Playgroud)
上面的代码将返回a const bool,但不保证对象不会更改其逻辑状态.
bool isReady() const
Run Code Online (Sandbox Code Playgroud)
这将返回a bool,它保证对象的逻辑状态不会改变.在这种情况下,没有必要const在返回类型之前写入.返回a是没有意义的,const bool因为它无论如何都是副本.所以制作它const是没用的.第二个const是const正确性所必需的,这不是出于速度原因而是为了使您的程序更可靠和安全.
Dia*_*ana 22
它们意味着两件不同的事情:
const bool isReady() {
return ready;
}
Run Code Online (Sandbox Code Playgroud)
这会返回一个常量bool.意思是一个bool,它不能在创建时改变值.
bool getReady() const {
return ready;
}
Run Code Online (Sandbox Code Playgroud)
这是一个常量函数,意味着一个函数不会改变它所属类的任何成员变量.这是建议用于getter的样式,因为它们的唯一目的是检索数据,不应修改进程中的任何内容.
const method告知编译器您不会修改调用此方法的类实例:
class A {
public:
bool getReady() const {
return ready;
}
};
Run Code Online (Sandbox Code Playgroud)
因此,如果您尝试在getReady()中修改对象,则编译器将发出错误.const方法很有用,你可以使用ie:const A&或const A*,那么你只能在这些对象上调用const方法.
至于:
const bool isReady() {
return ready;
}
Run Code Online (Sandbox Code Playgroud)
这个const实际上没有真正的好处,因为在isReady()返回时复制了bool.这样的const对子级意义,如果返回类型是const char*或const A&,在这种情况下const让你的字符的字符串或一个类的实例是不可改变的.