我仍然在学习关于C++的知识,我到处都在读到我必须在任何地方使用const (我想是因为速度原因)。
我通常这样写我的getter方法:
const bool isReady() {
return ready;
}但是我已经看到了一些IDE自动生成getter的方式:
bool getReady() const {
return ready;
}但是,在编写委托时,我碰巧发现了这个错误,如果const是在函数之后:
member function 'isReady' not viable: 'this' argument has type 'const VideoReader', but function is not marked const那么,编写const getter的更好方法是什么呢?我真的需要关心吗?
发布于 2014-01-31 19:04:51
这两种方式有很大的不同。
const bool isReady()上面的代码将返回一个const bool,但它不能保证对象不会改变其逻辑状态。
bool isReady() const这将返回一个bool,它保证您的对象的逻辑状态不会改变。在这种情况下,没有必要在返回类型前面编写const。返回const bool是没有意义的,因为它无论如何都是一个副本。所以把它设为const是没有用的。const correctness需要第二个const,使用它并不是为了提高速度,而是为了使您的程序更加可靠和安全。
发布于 2014-01-31 19:03:58
它们的意思是两个不同的东西:
const bool isReady() {
return ready;
}这将返回一个常量bool。这意味着布尔值从创建之日起就不能改变。
bool getReady() const {
return ready;
}这是一个常量函数,这意味着该函数不会改变它所属类的任何成员变量。这是推荐用于getter的样式,因为它们的唯一目的是检索数据,并且不应该修改过程中的任何内容。
发布于 2014-01-31 19:06:15
const方法通知编译器您不会修改调用此方法的类实例:
class A {
public:
bool getReady() const {
return ready;
}
};因此,如果你试图在getReady()中修改你的对象,那么编译器将会出现错误。Const方法在你有.:const A&或const A*的地方很有用,那么你只能在这样的对象上调用const方法。
至于:
const bool isReady() {
return ready;
}这个常量实际上并没有提供什么实际的好处,因为在isReady()返回的同时复制了bool。如果返回的类型是const char*或const A&,这样的const应该是有意义的,在这种情况下,const会使你的字符串或A类实例不可变。
https://stackoverflow.com/questions/21478342
复制相似问题