A. *_*uff 5 c++ compiler-construction copy-constructor assignment-operator
我正在读的书说,当您的类包含一个引用或const成员时,使用编译器生成的复制构造函数或赋值运算符将不起作用。例如,
#include <iostream>
#include <string>
using namespace std;
class TextBlock
{
public:
TextBlock (string str) : s(str) {
cout << "Constructor is being called" << endl;
}
string& s;
};
int main () {
TextBlock p("foo");
TextBlock q(p);
q = p;
cout << "Q's s is " << q.s << endl;
return(0);
}
Run Code Online (Sandbox Code Playgroud)
根据我的书,这两行TextBlock q(p);和q = p;都应返回编译器错误。但是使用Linux的g ++编译器时,我只会看到一行错误。q = p;当我将其注释掉时,这可以正常工作并且代码可以编译。正确的s输出给Q,因此显然是由编译器生成的副本构造函数复制的。将行更改为时string& s;,我得到相同的结果const string s。
C ++是否进行了一些更改,现在允许自动为引用和const对象生成复制构造函数,但不允许赋值运算符生成?还是我只是不正确地理解这本书?有什么想法吗?