避免返回const本地人?

时间:2016-07-04 20:32:52

标签: c++ c++14 move-semantics nrvo

我一直认为将const locals设为const

是件好事
void f() {
    const resource_ptr p = get();
    // ...
}

然而,上周我看了那些参与C ++练习的学生,并且想知道返回一个const指针

resource_ptr f() {
    const resource_ptr p = get();
    // ...
    return p;
}

这里,如果编译器不能应用NRVO(想象一下这种情况,那可能会返回两个指针中的一个,具体取决于条件),突然const变成了悲观,因为编译器可以不会从p移动,因为它是常量。

尝试避免返回的本地人const是一个好主意,还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:15)

  

尝试避免返回的本地人const是一个好主意,还是有更好的方法来解决这个问题?

是。实际上,如果resource_ptr仅移动类型,如果您尝试返回const,则会出现编译时错误。

这是一个例子,其中“经过验证的”C ++ 98/03建议不再适用于C ++ 11和转发。