Избегать 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 и более поздних версиях.

Другие вопросы по тегам