我经常看到关于在C++中重载逗号运算符的问题(主要与重载本身无关,但是像序列点的概念一样),这让我想知道:
你什么时候应该重写逗号?它的实际用途有哪些例子?
我只是想不出任何我已经看到或需要的东西
foo, bar;
Run Code Online (Sandbox Code Playgroud)
在现实世界的代码中,所以我很好奇何时(如果有的话)实际使用它.
为什么在逗号运算符(例如下面的示例)中指定的表达式不被视为常量表达式?
例如,
int a = (10,20) ;
Run Code Online (Sandbox Code Playgroud)
当在全局范围内给出时产生错误"初始化器不是常量",尽管由逗号运算符分隔的两个表达式都是常量(常量表达式).为什么整个表达式不被视为常量表达式?为了澄清我已经阅读了','运算符在C中做了什么?和C逗号运算符的使用.他们没有涉及逗号运算符的这个方面.
我有三个代码片段.这个:
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:语法错误:'常量'
为何如此差异?为什么不是所有三个编译都在三个,中都具有相同的效果?
使用GCC编译器,在C程序中跟随两个运算符的情况,观察到不同的行为.
1.
int i = 1,2,3;
printf("%d",i); // this will give compile time error
Run Code Online (Sandbox Code Playgroud)
和,
2.
int i;
i = 1,2,3;
printf("%d",i); // Its output will be 1.
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,编译器给出了错误"错误:期望标识符或'('数字常量之前'.并且在第二种情况下,没有错误,输出是1.可以在这里解释两种情况下的编译器行为吗?编译器如何?解释这两个陈述?
提前感谢您的意见.
int i=1,2,3;
int i=(1,2,3);
int i; i=1,2,3;
这些陈述有什么区别?我无法理解它.