。 。 。比如Algol68或Smalltalk?这将解决的问题是初始化一个const变量,其值在if-then-else语句中确定。
是的,我知道,C ++没有这样定义。但是阻碍什么呢?将 if-expression 重新定义为 if语句是否会破坏向后兼容性?或者难以消除所需的语言文档更改的歧义?
示例:
auto const x = if (some condition)
{
expression 1;
expression 2;
expression 3;
}
else
{
expression 4;
}
在这种情况下,我无法做到
auto const x = (some condition) ? expression1 : expression2;
答案 0 :(得分:10)
非正式地说,C ++就像C一样,支持“语句编程”和“表达式编程”(更多细节见https://stackoverflow.com/a/1618867/187690)。语句不是C ++中的表达式。您不能将语句用作表达式。
在表达式编程中,您通常使用?:
运算符来实现分支。但是,您也可以将表达式嵌入到语句中,反之亦然。 GNU C ++编译器提供了一个名为“语句表达式”的扩展,它允许将语句嵌入到表达式中。但是从C ++ 11开始,您可以使用lambdas以标准方式实现相同的目标。 E.g。
auto const x = []()
{
if (some condition)
{
expression 1;
expression 2;
return expression 3;
}
else
{
return expression 4;
}
}();
你的lambda是否有捕获和/或参数取决于你的意图。