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++17constexpr
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++17constexpr
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中也是有效的。