社区
C++ 语言
帖子详情
C++逗号运算符问题,有点奇怪
cctime
2008-02-29 05:38:52
char *f()
{
printf("called\n");
return 0;
}
class CTest
{
public:
CTest(int i) : m_i(f(), i) { } //改成m_i((f(), i))结果会不一样
private:
int m_i;
};
void main()
{
CTest test(3);
}
...全文
466
11
打赏
收藏
C++逗号运算符问题,有点奇怪
char *f() { printf("called\n"); return 0; } class CTest { public: CTest(int i) : m_i(f(), i) { } //改成m_i((f(), i))结果会不一样 private: int m_i; }; void main() { CTest test(3); }
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cctime
2008-07-17
打赏
举报
回复
2种情况程序编译都没有错,运行也没有异常,m_i都能初始化为3(理解为逗号运算的话,值就是3)。
只是多一层括号的话,f()得到执行,否则得不到执行。前些天好像想通了,今天又忘记咋回事了。
hai040
2008-07-01
打赏
举报
回复
[Quote=引用 6 楼 e_sharp 的回复:]
引用 3 楼 Vitin 的回复:
因为表达式 m_i(f(),i) 是表示初始化语义的后缀表达式,其中,“,”并不是逗号表达式的操作符,而是参数列表(argument list)的分割符。因此,它表示构造m_i需要两个参数,这需要调用m_i所属类型的双参数构造函数,而int没有这样的构造函数,从而导致程序错误。
而对于表达式 m_i((f(),i)) ,由于内层括号的存在,变成了单参数的初始化,并使用子表达式(f(),i)的结果来初始化m_i。此时“,”是逗号表…
[/Quote]
古坟
e_sharp
2008-07-01
打赏
举报
回复
[Quote=引用 3 楼 Vitin 的回复:]
因为表达式 m_i(f(),i) 是表示初始化语义的后缀表达式,其中,“,”并不是逗号表达式的操作符,而是参数列表(argument list)的分割符。因此,它表示构造m_i需要两个参数,这需要调用m_i所属类型的双参数构造函数,而int没有这样的构造函数,从而导致程序错误。
而对于表达式 m_i((f(),i)) ,由于内层括号的存在,变成了单参数的初始化,并使用子表达式(f(),i)的结果来初始化m_i。此时“,”是逗号表达式的操作符,该子表达式…
[/Quote]
正解
怎么不结贴阿,都这么久了
cumtxxl
2008-07-01
打赏
举报
回复
标题应该改成"C++括号运算符问题"
关逗号什么事了?
jinwei1984
2008-07-01
打赏
举报
回复
很强大!
学习了
dazhuaye
2008-07-01
打赏
举报
回复
[Quote=引用 3 楼 Vitin 的回复:]
因为表达式 m_i(f(),i) 是表示初始化语义的后缀表达式,其中,“,”并不是逗号表达式的操作符,而是参数列表(argument list)的分割符。因此,它表示构造m_i需要两个参数,这需要调用m_i所属类型的双参数构造函数,而int没有这样的构造函数,从而导致程序错误。
而对于表达式 m_i((f(),i)) ,由于内层括号的存在,变成了单参数的初始化,并使用子表达式(f(),i)的结果来初始化m_i。此时“,”是逗号表达式的操作符,该子表达式…
[/Quote]
shougao_net
2008-03-05
打赏
举报
回复
c++技术Q群
35011905
欢迎各问高手加入
robertzhang10
2008-02-29
打赏
举报
回复
楼上正解
Vitin
2008-02-29
打赏
举报
回复
因为表达式 m_i(f(),i) 是表示初始化语义的后缀表达式,其中,“,”并不是逗号表达式的操作符,而是参数列表(argument list)的分割符。因此,它表示构造m_i需要两个参数,这需要调用m_i所属类型的双参数构造函数,而int没有这样的构造函数,从而导致程序错误。
而对于表达式 m_i((f(),i)) ,由于内层括号的存在,变成了单参数的初始化,并使用子表达式(f(),i)的结果来初始化m_i。此时“,”是逗号表达式的操作符,该子表达式的结果就是i,因此初始化完成后,m_i==i成立。
Supper_Jerry
2008-02-29
打赏
举报
回复
这个代码实在。。。。
ltc_mouse
2008-02-29
打赏
举报
回复
用Dev C++编译了下,没发现不一样呀。所谓的不一样是什么意思?一个有编译Warnings一个没有?
相关推荐
c++
逗号
运算符
的重载 源代码
c++
逗号
运算符
的重载 源代码 自己编写,验证无误
【
C++
】三目
运算符
与 函数 与 空变量 与
逗号
表达式 的
奇怪
用法
无内鬼,来点歪门邪道 最近用三目
运算符
用的
有点
上头,除了正常的赋值外,一些纯执行的函数(像是printf这种的无返回值or返回值一般无意义的函数)都想往三目
运算符
里塞。 //【正常情况】 #include <stdio.h> int main(){ bool flag=true; if(flag) printf("flag为真\n"); else printf("flag为假\n"); return 0; } //【骚操作_三目
运算符
代替简单的if语句】 #incl
改善
C++
程序的150个建议学习之建议6:明晰
逗号
分隔表达式的
奇怪
之处
建议6:明晰
逗号
分隔表达式的
奇怪
之处
逗号
分隔的表达式是从C继承而来的。它用一种特殊的
运算符
—
逗号
运算符
将多个表 达式连接起来。
逗号
表达式的一般形式为: 表达式1,表达式2,表达式3......表达式n 需要注意的是,整个
逗号
分隔表达式的值为表达式n的值。 在使用for-循环和while-循环时,经常会使用这样的表达式。然而,由于语言规则不直 观,因此理解这样的语句存在一定的困难。例如
C语言
逗号
运算符
和
逗号
表达式
C语言
逗号
运算符
和
逗号
表达式C语言
逗号
运算符
和
逗号
表达式y = (x = a + b), (b + c)结果
奇怪
C语言
逗号
运算符
和
逗号
表达式 在C语言中
逗号
“,”也是一种
运算符
,称为
逗号
运算符
。 其功能是把两个表达式连接 其一般形式为: 表达式 1,表达式 2 1+1,2+2 其求值过程是分别求两个表达式的值,并以表达式 2 的值作为整个
逗号
表达式的值。 main(){ int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf("y=%d,x=%d",y,x);
javascript
逗号
_JavaScript中
逗号
的
奇怪
用法
javascript
逗号
I recently discovered a curious yet possibly useful thing in JavaScript, related to the comma operator. 最近,我在JavaScript中发现了一个与
逗号
运算符
有关的
奇怪
但可能有用的东西。 I mostly use commas to separate proper...
发帖
C++ 语言
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
6.3w+
社区成员
25.0w+
社区内容
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2008-02-29 05:38
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下