将const ref分配给非const对象

use*_*138 0 c++

在下面的代码中,我们返回一个const对象并将其收集在非const对象中,并且它仍然可以编译而不会出现错误或警告.

class foo
{
    int i;
public:
    const foo& call() const
    {
        return *this;
    }
};

int main()
{
    foo aa, bb;
    bb = aa.call();
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 15

实际上,当你执行bb = aa.call( )调用隐式复制构造函数时,你实际上正在获取一个const对象的副本foo.

如果你想打破编译,那么试试:

foo aa;
foo& bb = aa.call( );
Run Code Online (Sandbox Code Playgroud)

注意:

隐式复制构造函数通常定义为:

foo( const foo& exist );
Run Code Online (Sandbox Code Playgroud)

并且在默认情况下只执行成员复制.

  • 您可能想要解释为什么要制作副本 (2认同)