Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么if语句不返回C++;_C++ - Fatal编程技术网

C++ 为什么if语句不返回C++;

C++ 为什么if语句不返回C++;,c++,C++,。比如在Algol68或Smalltalk中?这将解决的问题是初始化常量变量,其值在if-then-else语句中确定 是的,我知道,C++不是这样定义的。但是,是什么阻碍了我们?将if表达式重新定义为if语句会破坏向后兼容性吗?或者,要消除所需语言文档更改的歧义会非常困难吗 例如: auto const x = if (some condition) { expression 1; expression 2; expression 3; } else {

。比如在Algol68或Smalltalk中?这将解决的问题是初始化常量变量,其值在if-then-else语句中确定

<>是的,我知道,C++不是这样定义的。但是,是什么阻碍了我们?将if表达式重新定义为if语句会破坏向后兼容性吗?或者,要消除所需语言文档更改的歧义会非常困难吗

例如:

auto const x = if (some condition)
{   
    expression 1;
    expression 2;
    expression 3;

}
else
{
    expression 4;
}
在这种情况下,我做不到

auto const x = (some condition) ? expression1 : expression2;

<非正式地说,C++,就像C一样,支持“语句编程”和“表达式编程”(请参阅更详细的说明)。语句不是C++中的表达式。不能将语句用作表达式

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

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

你的lambda是否会有捕获和/或参数取决于你的意图。

你知道吗?你能举例说明你在寻找什么吗?因为C++不可能是C++,它将是一种不同的语言。玩魔鬼的倡导者(因为我的日常语言确实有这个特性)。-什么是一个具体的例子来说明为什么它是可取的?@Patrick Fromberg:“Trigraph”???这不是术语“trigraph”的意思。我将您的解决方案标记为正确的解决方案。但是,在这种情况下,不能将语句用作表达式的说法是错误的,因为我的问题就是要重新定义它,而你还没有证明这是不可能的。AlgOL68绝对不是我最喜欢的语言,正如奥利弗所建议的(我太年轻),但我想展示C++,它是一个尝试的路径。但是,您是否有语句可以用作表达式的编程语言示例?我想不出一个,但我不知道有很多语言。Patrick Fromberg:“答案是不可能的”(除了答案中提到的方法)是C++语法。为了使它详尽无遗,我必须引用C++表达式的全部语法。@ JuangopangZa,对你的问题:AlgOL68,正如前面提到的,而且SimalTalk。他们将
if
else
子句括号中的内容称为块。这样一个块的值是它的最后一个表达式的值,通常也是最后一个语句。当然,表达式始终是语句,但不是相反。但是,除非您与向后兼容性问题冲突,或者如果您无法消除语言文档中产生的矛盾(这是我的问题),否则将
if
定义为一个表达式并没有多少障碍。