Избегать 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
на возвращенных местных жителей, или есть лучший способ справиться с этим?
1 ответ
Это хорошая идея, чтобы попытаться избежать
const
на возвращенных местных жителей, или есть лучший способ справиться с этим?
Да. На самом деле, если resource_ptr
это тип только для перемещения, вы получите ошибку во время компиляции, если попытаетесь вернуть такую, которая const
,
Это пример того, где "проверенный и верный" совет C++98/03 больше не применяется в C++11 и более поздних версиях.