避免返回的 const locals?

Avoid const locals that are returned?

我一直觉得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 返回当地人是个好主意,还是有更好的方法来处理这个问题?

Is it a good idea to try and avoid const on returned locals, or is there a better way to deal with this?

是的。事实上,如果 resource_ptr 是一个 只移动 类型,如果你尝试 return 一个 const 类型,你会得到一个编译时错误.

这是一个示例,其中 "tried-and-true" C++98/03 建议不再适用于 C++11 及更高版本。