21

我一直认为让 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 .

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

4

1 回答 1

15

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

是的。事实上,如果resource_ptr是一个只移动类型,如果你尝试返回一个是const.

这是“经过验证的”C++98/03 建议不再适用于 C++11 及更高版本的示例。

于 2016-07-04T20:48:27.513 回答