【问题标题】:Why does double x = 0,1; not compile?为什么双 x = 0,1;不编译?
【发布时间】:2012-10-20 05:13:02
【问题描述】:
double x = 0,1;

无法编译(在 MSVC9.0 上尝试)。错误是

C2059 syntax error : 'constant'

确实意识到那里有一个逗号而不是一个点,但是上面的行不应该被解释为下面的吗?

double x = (0,1); //which is double x = 1;

顺便说一句,使用括号初始化编译成功。

我认为operator , 的优先级低于operator =,但在这种情况下= 不是运算符,所以这应该不是问题。什么句法规则决定了

 double x = 0,1; 

应该是非法的?

【问题讨论】:

  • 这不只是因为通常你有double x = 0, y;吗?
  • 有趣的问题,最初我认为它也应该编译。 :)
  • 请注意,如果您编写double(x)(1), y;,这是一个有效的声明,但也可以解析为表达式。

标签: c++ syntax comma-operator


【解决方案1】:

在声明期间,没有括号的逗号被视为声明之间的分隔符。例如:

double x = 0, y = 1;

double x = 0, y;

你输入的内容相当于

double x = 0;
double 1; 

这显然是不正确的。

【讨论】:

    【解决方案2】:

    好吧,它被视为

    double x = 0; double 1;
    

    这就是为什么。就像你写的一样

    double x = 0, y;
    

    这是声明的语法,您只是试图将1 声明为变量(这是错误的)。不要以为它还有更多...

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2011-04-21
      • 2017-10-12
      • 2020-12-04
      • 2020-12-16
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多