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

Pat*_*erg -4 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;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下我不能这样做

auto const x = (some condition) ? expression1 : expression2;
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 10

非正式地说,C++就像C一样,支持"语句编程"和"表达式编程"(更多细节见/sf/answers/113320721/).语句不是C++中的表达式.您不能将语句用作表达式.

在表达式编程中,您通常使用?:运算符来实现分支.但是,您也可以将表达式嵌入到语句中,反之亦然.GNU C++编译器提供了一个名为"语句表达式"的扩展,它允许将语句嵌入到表达式中.但是从C++ 11开始,您可以使用lambdas以标准方式实现相同的目标.例如

auto const x = []() 
{
  if (some condition)
  {   
    expression 1;
    expression 2;
    return expression 3;
  }
  else
  {
    return expression 4;
  }
}();
Run Code Online (Sandbox Code Playgroud)

lambda是否具有捕获和/或参数取决于您的意图.