为什么if语句不返回C ++中的值

时间:2018-02-12 22:07:24

标签: c++

。 。 。比如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;

1 个答案:

答案 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是否有捕获和/或参数取决于你的意图。