代码之家  ›  专栏  ›  技术社区  ›  Brett Hale

逗号作为变量初始化中的分隔符(不作为运算符)

  •  8
  • Brett Hale  · 技术社区  · 7 年前

    这似乎是一个很简单的问题,但我已经很久没有用自己的方式研究过了。。。在初始化用逗号分隔的变量时,我假设以下做法不安全:

    unsigned int n = foo.size, nxn = n * n;

    操作人员

    if (<some condition>)
        a = true, b = value;
    

    {} 分号分隔表达式的作用域。

    但我的问题是重新检查变量初始化情况。我的假设是错误的吗 nxn

    2 回复  |  直到 7 年前
        1
  •  9
  •   NathanOliver    7 年前

    [dcl.decl]/3

    初始化声明器 在声明中单独分析,就像它本身在声明中一样。[...]

    unsigned int n = foo.size, nxn = n * n;
    

    unsigned int n = foo.size;
    unsigned int nxn = n * n;
    

    有一个注释,其他规则除外,如 auto 或者,如果名称与类型有阴影,但在本例中不适用。


    如果将多个变量放在一行上,请非常小心指针

    int * foo, bar;
    

    没有给你两个指针。相反 foo 是指针和 bar 是一个 int

    int * foo, * bar;
    

    得到两个指针。出于这个原因,我宁愿使用

    int * foo;
    int * bar;
    

    为了安全起见,支付额外的密钥。

        2
  •  3
  •   dbush    7 年前

    nxn 将正确初始化,因为 n nxn 定义了。

    推荐文章