在下面的代码中,我们返回一个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)
并且在默认情况下只执行成员复制.
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |