force const存储按值返回的值

时间:2012-05-09 19:00:31

标签: c++ const return return-by-value

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

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

3 个答案:

答案 0 :(得分:3)

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

<德尔>     结构测试     {     私人的:         test(const test&amp; other);     };

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

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

答案 1 :(得分:0)

没有办法做到这一点。你为什么要这样做?你想要实现什么目标?

答案 2 :(得分:0)

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