避免返回的 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 及更高版本。
我一直觉得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 及更高版本。