有条件地初始化const的首选方法

时间:2017-01-06 12:46:13

标签: c++11 initialization 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" } ();

3 个答案:

答案 0 :(得分:3)

C ++核心指南建议Borrowing from this answer

答案 1 :(得分:2)

您的if语句示例未初始化任何const,因为s不是const

关于其他选项(这主要是主观的),以下是我的指南:

  • 当表达式易于阅读时,请使用?: (三元运算符)。在你的情况下,我认为没关系。

  • 使用IIFE (立即调用函数表达式)或将初始化重构为函数,该函数在初始化逻辑很长且复杂时返回值它会对初始化变量的函数的可读性产生负面影响。

答案 2 :(得分:0)

  

初始化const自动变量的首选方法是什么?

首选方法尽可能简单

使用条件声明:

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

使用函数调用(此处为C ++ 17 constexpr):

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);