我一直认为将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
是一个好主意,还是有更好的方法来解决这个问题?
答案 0 :(得分:15)
尝试避免返回的本地人
const
是一个好主意,还是有更好的方法来解决这个问题?
是。实际上,如果resource_ptr
是仅移动类型,如果您尝试返回const
,则会出现编译时错误。
这是一个例子,其中“经过验证的”C ++ 98/03建议不再适用于C ++ 11和转发。