gpt4 book ai didi

c++ - 'if' 表达式后续变量声明

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:34 25 4
gpt4 key购买 nike

这是 C++, variable declaration in 'if' expression 的后续行动

if( int x = 3 && true && 12 > 11 )
x = 1;

规则(据我所知)是:

  1. 每个表达式只能声明 1 个变量
  2. 变量声明必须首先出现在表达式中
  3. 必须使用复制初始化语法 不能 直接初始化语法
  4. 声明两边不能有括号

根据 this answer,1 和 2 是有意义的但我看不出 3 和 4 有任何理由。其他人可以吗?

最佳答案

C++03 标准将选择语句定义为:

selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
switch ( condituion ) statement
condition:
expression
type-specifier-seq attribute-specifieropt declarator = initializer-clause

C++11 额外添加了以下规则:

condition:
type-specifier-seq attribute-specifieropt declarator braced-init-list

一般来说,这意味着您可能放在条件中的声明实际上只不过是保留命名的条件表达式的值以供进一步使用,即对于以下代码:

if (int x = 3 && true && 12 > 11) {
// x == 1 here...

x 的计算结果为:3 && true && (12 > 11)

回到你的问题:

3) C++11 现在允许您在这种情况下使用直接初始化(使用大括号初始化器),例如:

if (int x { 3 && true && 12 > 11 }) {

4) 以下:if ((int x = 1) && true) 根据上面的定义没有意义,因为它不符合:“表达式或声明”规则条件

关于c++ - 'if' 表达式后续变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com