社区
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);
}
...全文
492
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); }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
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++
中赋值
运算符
与
逗号
运算符
的用法详解
主要介绍了
C++
中赋值
运算符
与
逗号
运算符
的用法详解,是
C++
入门学习中的基础知识,需要的朋友可以参考下
C++
编程中
逗号
运算符
和条件
运算符
的使用方法讲解
逗号
运算符
:, 允许对两个语句进行分组,其中有一个是预期的。 expression , expression 备注
逗号
运算符
具有从左向右的关联性。 由
逗号
分隔的两个表达式将从左向右进行计算。 始终计算左操作数,并且在计算右操作数之前将完成所有副作用。 在某些上下文(如函数参数列表)中,
逗号
可用作分隔符。 不要将该
逗号
用作分隔符与将其用作
运算符
的情况混淆;这两种用法完全不同。 考虑表达式 e1 , e2 该表达式的类型和值是 e2 的类型和值;e1 的计算结果将被丢弃。 如果右操作数是左值,则结果为左值。 在通常将
逗号
用作分隔符的方案中(例如,在函数或聚合初始值设定项的实参中),逗
C++
程序设计-谭浩强-清晰版完整书签
C++
程序设计-谭浩强-清晰版完整书签 封面 -24 目录 -10 第1篇 基本知识 1 第1章
C++
的初步知识 3 1.1 从C到
C++
3 1.2 最简单的
C++
程序 5 1.3
C++
程序的构成和书写形式 12 1.4
C++
程序的编写和实现 13 1.5 关于
C++
上机实践 15 习题 16 第2章 数据类型与表达式 19 2.1
C++
的数据类型 19 2.2 常量 21 2.2.1 什么是常量 21 2.2.2 数值常量 21 2.2.3 字符常量 23 2.2.4 符号常量 26 2.3 变量 27 2.3.1 什么是变量 27 2.3.2 变量名规则 28 2.3.3 定义变量 28 2.3.4 为变量赋初值 29 2.3.5 常变量 30 2.4
C++
的
运算符
31 2.5 算术
运算符
与算术表达式 32 2.5.1 基本的算术
运算符
32 2.5.2 算术表达式和
运算符
的优先级与结合性 32 2.5.3 表达式中各类数值型数据间的混合运算 32 2.5.4 自增和自减
运算符
33 2.5.5 强制类型转换
运算符
35 2.6 赋值
运算符
与赋值表达式 36 2.6.1 赋值
运算符
36 2.6.2 赋值过程中的类型转换 36 2.6.3 复合的赋值
运算符
38 2.6.4 赋值表达式 39 2.7
逗号
运算符
与
逗号
表达式 40 习题 41
数据类型和表达式(2013级-
C++
程序设计)
2013级,
C++
程序设计课件。第2章 数据类型和表达式。内容: 2.1
C++
的数据类型 2.2 常量 2.3 变量 2.4
C++
的
运算符
2.5 算术
运算符
与算术表达式 2.6 赋值
运算符
与赋值表达式 2.7
逗号
运算符
与
逗号
表达式
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章