2017-01-06 2 views
1

Каков предпочтительный способ инициализации автоматической переменной const? Я могу думать о нескольких.Предпочтительный способ условной инициализации const

if заявление:

const std::string s; 
if(condition) { const_cast<std::string&>(s) = "first"; } 
else { const_cast<std::string&>(s) = "second"; } 

?: Оператор:

const std::string s = (condition) ? "first" : second; 

сразу вызывается функция выражение:

const std::string s = [ & ]() 
    { if(condition) return "first" else return "second" }(); 
+4

Я не вижу, как вы инициализируете переменную 'const', используя первый метод. Сама 'std :: string s' сама по себе не является' const'. – raymai97

+0

@ raymai97 действительно. Исправлена. – Vorac

ответ

2

Ваш if заявление пример не инициализировать любые const как s не const.

Что касается других вариантов (это в основном субъективный характер), вот мои рекомендации:

  • Используйте ?:(тройная оператор) когда выражение короткий и легко читать , В вашем случае, я думаю, все будет хорошо.

  • Используйте IIFE (сразу вызывается выражение функции) или реорганизовать инициализации функции, которая возвращает значение , когда логика инициализации длинный и сложный и когда это может негативно повлиять на читаемость функции, где переменная инициализируется.

0

Что является предпочтительным способом инициализировать константный автоматическую переменную?

Предпочтительный способ максимально прост в использовании.

С условного оператора:

std::string const a = condition ? "second" : "first"; 

С вызовом функции (17 constexpr C++ здесь):

constexpr char const* get_const(int condition) { 
    switch(condition) { 
    case 0: return "first"; 
    case 1: return "second"; 
    default: return "default"; 
    } 
} 
std::string const b = get_const(condition); 
+0

Почему «переключатель»? Почему 'int'? Ваш 'get_const' должен просто взять' bool' и вернуться через тернар. Ваша функция 'constexpr' также действительна и в C++ 14, и будет действительна в C++ 11, если вы просто использовали тернарный оператор в своем теле. –

Смежные вопросы