2015-06-29 8 views
-2

У меня есть функция, возвращающая константную ссылку на объект следующим образом:Const объявление переменной

const &Foo getFoo() { 
    return foo; 
} 

Если у меня есть еще одна функция следующим образом:

void bar() { 
    const qwerty = asdf.getFoo(); 
    int x = qwerty.x + 5; 
    // something here 
} 

ли предшествующее QWERTY с сопзЬ необходимым или лучше практика?

+0

Был ли компилятор жаловаться при удалении константы? –

+1

Обязательно: попробуйте, и компилятор вам скажет. Наилучшая практика: основано мнение Primarilly. – John3136

ответ

4

Ну, во-первых, это не является ни необходимой, ни лучшей практикой - этого недостаточно. Вам тоже нужен тип. Как только вы заполните это, const по-прежнему не требуется, если вы не попытаетесь взять его с помощью ссылки const. У нас есть три варианта, которые могли бы компилировать:

Foo qwerty = asdf.getFoo();  // (A) 
const Foo qwerty = asdf.getFoo(); // (B) 
const Foo& qwerty = asdf.getFoo(); // (C) 

Учитывая, что getFoo() возвращает ссылку на const, наиболее эффективным, что было бы принять его в качестве ссылки на const, а также, что позволяет избежать копирования. Если нет, то есть вы хотите a копия - в этом случае сделайте (A) или (B), в зависимости от того, хотите ли вы модифицируемую копию или нет. Если Foo не копируется, и в этом случае (C) - ваш единственный вариант.

В конечном счете, это зависит от того, что вы хотите делать с qwerty. Я по умолчанию должен был бы (C), и вам нужна причина, чтобы выбрать тот или другой.