Подтвердить что ты не робот

Избегайте постоянных locals, которые возвращаются?

Я всегда думал, что хорошо иметь константные locals const

void f() {
    const resource_ptr p = get();
    // ...
}

Однако на прошлой неделе я наблюдал за студентами, которые работали над упражнением на С++, и которые задавались вопросом о возвращении указателя const

resource_ptr f() {
    const resource_ptr p = get();
    // ...
    return p;
}

Здесь, если компилятор не может применить NRVO (представьте себе какой-то сценарий, при котором это правда, возможно, возвращая один из двух указателей, в зависимости от условия), вдруг const становится пессимизацией, потому что компилятор не может перейдите из p, потому что он const.

Это хорошая идея, чтобы попытаться избежать const для возвращенных локалей, или есть лучший способ справиться с этим?

4b9b3361

Ответ 1

Это хорошая идея, чтобы попытаться избежать const для возвращенных локалей, или есть лучший способ справиться с этим?

Да. На самом деле, если resource_ptr - тип только для перемещения, вы получите ошибку времени компиляции, если вы попытаетесь вернуть тот, который равен const.

Это пример того, где "проверенные и истинные" рекомендации С++ 98/03 больше не применяются в С++ 11 и forward.