sha*_*oth 5 c++ comma-operator
我有三个代码片段.这个:
1,7; //yes, that's all the code
Run Code Online (Sandbox Code Playgroud)
编译好吧.这个:
double d = (1, 7);
Run Code Online (Sandbox Code Playgroud)
也编译好了.然而这一个:
double d = 1, 7;
Run Code Online (Sandbox Code Playgroud)
无法编译.gcc-4.3.4说
错误:数字常量之前的预期unqualified-id
和Visual C++ 10说
错误C2059:语法错误:'常量'
为何如此差异?为什么不是所有三个编译都在三个,中都具有相同的效果?
sha*_*eel 13
在前两种情况下,语句使用的是C++的逗号运算符
在后一种情况下,逗号被用作变量分离,编译器期望您声明多个标识符; 逗号在此处未被用作运算符.
最后一种情况类似于:
float x,y;
float a = 10, b = 20;
Run Code Online (Sandbox Code Playgroud)
当你这样做:
double d = 1, 7;
Run Code Online (Sandbox Code Playgroud)
编译器需要变量标识符而不是数字常量.因此7在这里是非法的.
但是当你这样做时:
double d = (1,7);
Run Code Online (Sandbox Code Playgroud)
正在使用正常的逗号运算符:1被评估并丢弃,而7被存储在d中.
所不同的是,1, 7;和(1, 7)你有表现,其中一个逗号操作符是允许的.
你最后一个例子
double d = 1, 7;
Run Code Online (Sandbox Code Playgroud)
是一个声明,其中逗号不是运算符而是分隔符.编译器会像
double d = 1, e = 7;
Run Code Online (Sandbox Code Playgroud)
这将是一个正确的变量声明.
请注意,逗号有时是运算符(在表达式中),但也可用作其他位置的分隔符,如函数声明中的参数列表.