C++11 有条件初始化常量的首选方法

C++11 有条件初始化常量的首选方法,c++11,initialization,constants,C++11,Initialization,Constants,初始化常量自动变量的首选方法是什么?我能想到几个 如果语句: const std::string s; if( condition ) { const_cast<std::string&>(s) = "first"; } else { const_cast<std::string&>(s) = "second"; } std::string const a = condition ? "second" : "first"; 立即调用的函数表达式: co

初始化常量自动变量的首选方法是什么?我能想到几个

如果
语句:

const std::string s;
if( condition ) { const_cast<std::string&>(s) = "first"; }
else { const_cast<std::string&>(s) = "second"; }
std::string const a = condition ? "second" : "first";
立即调用的函数表达式:

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

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

关于其他选择(这主要是主观的),以下是我的指导原则:

  • 当表达式较短且易于阅读时,使用
    ?:
    (三元运算符)。对你来说,我想没问题

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


如果
语句示例未初始化任何
常量,则
s
不是
const

关于其他选择(这主要是主观的),以下是我的指导原则:

  • 当表达式较短且易于阅读时,使用
    ?:
    (三元运算符)。对你来说,我想没问题

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

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

首选的方法是尽可能简单

使用条件语句:

const std::string s;
if( condition ) { const_cast<std::string&>(s) = "first"; }
else { const_cast<std::string&>(s) = "second"; }
std::string const a = condition ? "second" : "first";
通过函数调用(C++17
constexpr
here):

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

首选的方法是尽可能简单

使用条件语句:

const std::string s;
if( condition ) { const_cast<std::string&>(s) = "first"; }
else { const_cast<std::string&>(s) = "second"; }
std::string const a = condition ? "second" : "first";
通过函数调用(C++17
constexpr
here):


C++核心指南建议。

C++核心指南建议。

我看不出如何使用第一种方法初始化
const
变量。
std::string s
本身并不是开头的
const
。@raymai97确实如此。已修复。我看不出如何使用第一种方法初始化
const
变量。
std::string s
本身并不是开头的
const
。@raymai97确实如此。已修复。为什么切换<代码>
?为什么
int
?您的
get_const
只需获取一个
bool
并通过三值返回即可。你的
constexpr
函数在C++14中也是有效的,如果你只是在函数体中使用了三元运算符,那么它在C++11中也是有效的。为什么
开关
?为什么
int
?您的
get_const
只需获取一个
bool
并通过三值返回即可。您的
constexpr
函数在C++14中也是有效的,如果您只在函数体中使用三元运算符,它在C++11中也是有效的。