3

这就是我想要完成的事情:

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. 有解决方法吗?

4

3 回答 3

3

你按价值返回。您正在创建. const所以你基本上是说你不想复制const

结构测试{私有:测试(常量测试&其他);};

以前的代码不起作用,您会遇到大量其他错误。这是不可能的:)

它不起作用不是因为您限制它创建const对象的副本,而是没有办法强制新创建的对象也是const.

于 2012-05-09T19:07:19.503 回答
0

没有办法做到这一点。你为什么要这样做?你想达到什么目的?

于 2012-05-09T19:07:43.417 回答
0

您的问题是它返回一个 const 对象并调用您的复制分配或构造函数来创建一个新的非 const 对象的按值副本。您可以按值复制构造禁用并强制用户使用引用分配,但这可能很烦人。

于 2012-05-09T19:07:45.210 回答