::(范围解析运算符)在这个程序中做了什么?

时间:2016-06-09 00:40:06

标签: c++

我正在学习C ++,并在阅读一本书时看到了这个程序。

#include <stdio.h>

double counter = 50;

int main(){

for(int counter = 1; counter != 10; ++counter){
  printf("%d\n",::counter/counter);
}

}

现在,我读了范围解析运算符,我认为这将打印出全局变量计数器除以局部变量计数器。但是,该程序打印出来:

  

2094374456

     

4195758

     

4195758

     

4195758

     

4195758

     

4195758

     

4195758

     

4195758

     

4195758

在这种情况下,这些数字是什么以及范围解析运算符的作用是什么?

免责声明:我不懂C,但我在Java方面有丰富的经验。

2 个答案:

答案 0 :(得分:1)

::counter确实引用了全局变量counter。这段代码的问题是除法的结果是double类型,因为其中一个参数是,并且double值被传递给省略号,其中int是预期的格式说明符为%d。这导致未定义的行为。您需要将其更改为%f

答案 1 :(得分:1)

您使用了错误的格式说明符。 ::counter将是全局counter,其类型为double,因此除法的结果将为double类型,并且应通过%f格式说明符打印或其他要求加倍的说明符,例如%g

传递错误类型的数据会在C中调用未定义的行为,但我不确定C ++。

#include <stdio.h>

double counter = 50;

int main(){

    for(int counter = 1; counter != 10; ++counter){
      printf("%f\n",::counter/counter);
    }

}