这就是我想要完成的事情:
struct test{};
const test returnconst(){
return test();
}
test returnnonconst(){
return test();
}
int main(){
test t1=returnnonconst();
const test t2=returnnonconst();
test t3=returnconst(); //I want this to be a compile error
const test t4=returnconst();
}
编译器接受所有四个return *调用。我理解在第三次调用中构造了对象的副本,但我想强制returnconst
的调用者将值存储为const
。有解决方法吗?
答案 0 :(得分:3)
你是按价值回归的。您正在创建const
的副本。所以你基本上说你不想复制const
:
之前的代码不起作用,您会遇到大量其他错误。这是不可能的:))
它不起作用不是因为你限制它创建const
个对象的副本,但是没有办法强制新创建的对象也是const
。
答案 1 :(得分:0)
没有办法做到这一点。你为什么要这样做?你想要实现什么目标?
答案 2 :(得分:0)
你的问题是它返回一个const对象并调用你的拷贝赋值或构造函数来创建一个新的非const对象的by值副本。您可以通过值复制构造禁用并强制用户使用引用分配,但这可能很烦人。