Fab*_*ian 9 c++ getter reference
我只是想知道如果我只允许一个const引用变量,我是否可以绕过使用getter,如下所示
#include <string>
class cTest
{
private:
int m_i;
std::string m_str;
public:
const int & i;
const std::string & str;
cTest(void)
: i(m_i)
, str(m_str)
{}
};
int main(int argc, char *argv[])
{
cTest o;
int i = o.i; // works
o.i += 5; // fails
o.str.clear(); // fails
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么人们似乎根本不这样做.我缺少一些严重的劣势吗?请提供优缺点列表,并在必要时予以纠正.
好处:
缺点:
const_cast,人们可以搞乱私人成员,但这些人是恶作剧的,对吧?确实存在一些严重的缺点(除了你提到的第二个缺点,我也提到了"严重"类别):
1)您需要提供(并因此维护)复制构造函数:编译器默认值不起作用.
2)您需要提供赋值运算符:编译器默认值不起作用.
3)仔细考虑实现移动语义.同样,编译器默认值不起作用.
这三件事意味着const你提出的参考反模式是非首发.不要这样做!