Я всегда думал, что это хорошо, чтобы иметь константные местные быть константнойИзбегайте постоянных местных жителей, которые возвращаются?
void f() {
const resource_ptr p = get();
// ...
}
Однако на прошлой неделе я наблюдал студентов, которые работали на C++ упражнения и что удивило, константный указатель возвращается
resource_ptr f() {
const resource_ptr p = get();
// ...
return p;
}
Здесь , если компилятор не может применить NRVO (представьте себе какой-то сценарий, под которым это правда, возможно, возвращая один из двух указателей, в зависимости от состояния), внезапно const
становится пессимизацией, потому что компилятор не может перемещаться с p
, потому что это Уст.
Это хорошая идея, чтобы попытаться избежать const
на возвращенных местных жителей, или есть лучший способ справиться с этим?
Не может ли он двигаться из локального 'const' в любом случае с помощью правила as-if? –
На практике, составители, как правило, плохо относятся к применению (N) RVO в любых, но самых тривиальных обстоятельствах, поэтому это является разумной проблемой. Частным случаем является то, что ваша «локальная переменная» на самом деле является аргументом, когда копия эликсирования печально запрещена. –
Не должен ли компилятор определить, что время жизни 'p' закончится и переместится? – Pixelchemist