首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getter中的C++常量

getter中的C++常量
EN

Stack Overflow用户
提问于 2014-01-31 18:57:34
回答 5查看 44.6K关注 0票数 25

我仍然在学习关于C++的知识,我到处都在读到我必须在任何地方使用const (我想是因为速度原因)。

我通常这样写我的getter方法:

代码语言:javascript
复制
const bool isReady() {
    return ready;
}

但是我已经看到了一些IDE自动生成getter的方式:

代码语言:javascript
复制
bool getReady() const {
    return ready;
}

但是,在编写委托时,我碰巧发现了这个错误,如果const是在函数之后:

代码语言:javascript
复制
member function 'isReady' not viable: 'this' argument has type 'const VideoReader', but function is not marked const

那么,编写const getter的更好方法是什么呢?我真的需要关心吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-31 19:04:51

这两种方式有很大的不同。

代码语言:javascript
复制
const bool isReady()

上面的代码将返回一个const bool,但它不能保证对象不会改变其逻辑状态。

代码语言:javascript
复制
bool isReady() const

这将返回一个bool,它保证您的对象的逻辑状态不会改变。在这种情况下,没有必要在返回类型前面编写const。返回const bool是没有意义的,因为它无论如何都是一个副本。所以把它设为const是没有用的。const correctness需要第二个const,使用它并不是为了提高速度,而是为了使您的程序更加可靠和安全。

票数 54
EN

Stack Overflow用户

发布于 2014-01-31 19:03:58

它们的意思是两个不同的东西:

代码语言:javascript
复制
const bool isReady() {
    return ready;
}

这将返回一个常量bool。这意味着布尔值从创建之日起就不能改变。

代码语言:javascript
复制
bool getReady() const { 
    return ready;
}

这是一个常量函数,这意味着该函数不会改变它所属类的任何成员变量。这是推荐用于getter的样式,因为它们的唯一目的是检索数据,并且不应该修改过程中的任何内容。

票数 38
EN

Stack Overflow用户

发布于 2014-01-31 19:06:15

const方法通知编译器您不会修改调用此方法的类实例:

代码语言:javascript
复制
class A {
public:
bool getReady() const {
    return ready;
}
};

因此,如果你试图在getReady()中修改你的对象,那么编译器将会出现错误。Const方法在你有.:const A&或const A*的地方很有用,那么你只能在这样的对象上调用const方法。

至于:

代码语言:javascript
复制
const bool isReady() {
    return ready;
}

这个常量实际上并没有提供什么实际的好处,因为在isReady()返回的同时复制了bool。如果返回的类型是const char*const A&,这样的const应该是有意义的,在这种情况下,const会使你的字符串或A类实例不可变。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21478342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档