n*m
5 楼
是的,问题就是const, 问题就是那个 A(A&)...
Code3, 把A(A&) 换成 A(const A&) 了,结果呢,通过了,但是运行的结果表明 A(
const A&) 没有被调用过,只调用了 A(int). 我的问题就是既然这段函数不被 a=1 调
用,那么为什么会报错了?注意到Code1里,在没有 a=1 的时候是没有报错的。
其实把 a=1 改成 a(1) 也能顺利运行。
感觉 a=1 对copy constructor 做了些什么,但是却没有调用它。。。十分不解。而且
报出来的错相当看不明白。
Code3, 把A(A&) 换成 A(const A&) 了,结果呢,通过了,但是运行的结果表明 A(
const A&) 没有被调用过,只调用了 A(int). 我的问题就是既然这段函数不被 a=1 调
用,那么为什么会报错了?注意到Code1里,在没有 a=1 的时候是没有报错的。
其实把 a=1 改成 a(1) 也能顺利运行。
感觉 a=1 对copy constructor 做了些什么,但是却没有调用它。。。十分不解。而且
报出来的错相当看不明白。
y*i
6 楼
主要的问题在于编译器认为a=1的语句会去调用哪一个函数,一般a=1实际上是要去隐式
调用构造函数,除非你声明你的第一个构造函数A(int)为explicit。这里似乎如果你声
明copy构造的参数为非const的时候,造成了声明的歧义,A a=1的语句试图去匹配这个
构造函数,变成了类似A temp(1), a(temp);但声明为const就不会造成这种歧义,让a=
1直接去寻找A(int)的signiture
【在 n******m 的大作中提到】
: 是的,问题就是const, 问题就是那个 A(A&)...
: Code3, 把A(A&) 换成 A(const A&) 了,结果呢,通过了,但是运行的结果表明 A(
: const A&) 没有被调用过,只调用了 A(int). 我的问题就是既然这段函数不被 a=1 调
: 用,那么为什么会报错了?注意到Code1里,在没有 a=1 的时候是没有报错的。
: 其实把 a=1 改成 a(1) 也能顺利运行。
: 感觉 a=1 对copy constructor 做了些什么,但是却没有调用它。。。十分不解。而且
: 报出来的错相当看不明白。
调用构造函数,除非你声明你的第一个构造函数A(int)为explicit。这里似乎如果你声
明copy构造的参数为非const的时候,造成了声明的歧义,A a=1的语句试图去匹配这个
构造函数,变成了类似A temp(1), a(temp);但声明为const就不会造成这种歧义,让a=
1直接去寻找A(int)的signiture
【在 n******m 的大作中提到】
: 是的,问题就是const, 问题就是那个 A(A&)...
: Code3, 把A(A&) 换成 A(const A&) 了,结果呢,通过了,但是运行的结果表明 A(
: const A&) 没有被调用过,只调用了 A(int). 我的问题就是既然这段函数不被 a=1 调
: 用,那么为什么会报错了?注意到Code1里,在没有 a=1 的时候是没有报错的。
: 其实把 a=1 改成 a(1) 也能顺利运行。
: 感觉 a=1 对copy constructor 做了些什么,但是却没有调用它。。。十分不解。而且
: 报出来的错相当看不明白。
n*m
7 楼
恩,你说得跟实际结果完全一样。
但是我还是不解,如果我是编译器,我看到 a=1 ,我就直接找 A(int),找到了就好了
。那就不会报错。
如果我是比较笨的编译器,我看到 a=1 非得转化成 A temp(1) a(temp).那么我会给
code2报错,但是运行code3 的时候,我会作 A temp(1) a(temp) 分别调用了了 A(int
), A(const A&)....
声明 explicit,肯定报错吧?
为什么编译器会试图去匹配 A(A&),但是不试图去匹配 A(const A&)?不懂他的心思阿
,能详细说说么?
a=
【在 y**i 的大作中提到】
: 主要的问题在于编译器认为a=1的语句会去调用哪一个函数,一般a=1实际上是要去隐式
: 调用构造函数,除非你声明你的第一个构造函数A(int)为explicit。这里似乎如果你声
: 明copy构造的参数为非const的时候,造成了声明的歧义,A a=1的语句试图去匹配这个
: 构造函数,变成了类似A temp(1), a(temp);但声明为const就不会造成这种歧义,让a=
: 1直接去寻找A(int)的signiture
但是我还是不解,如果我是编译器,我看到 a=1 ,我就直接找 A(int),找到了就好了
。那就不会报错。
如果我是比较笨的编译器,我看到 a=1 非得转化成 A temp(1) a(temp).那么我会给
code2报错,但是运行code3 的时候,我会作 A temp(1) a(temp) 分别调用了了 A(int
), A(const A&)....
声明 explicit,肯定报错吧?
为什么编译器会试图去匹配 A(A&),但是不试图去匹配 A(const A&)?不懂他的心思阿
,能详细说说么?
a=
【在 y**i 的大作中提到】
: 主要的问题在于编译器认为a=1的语句会去调用哪一个函数,一般a=1实际上是要去隐式
: 调用构造函数,除非你声明你的第一个构造函数A(int)为explicit。这里似乎如果你声
: 明copy构造的参数为非const的时候,造成了声明的歧义,A a=1的语句试图去匹配这个
: 构造函数,变成了类似A temp(1), a(temp);但声明为const就不会造成这种歧义,让a=
: 1直接去寻找A(int)的signiture
相关阅读
[慎] 放松一下,来看看3D图吧, 只需注视30秒小猴“淘气”与老虎形影不离 (转载)想带孩子搬到墨西哥Cancun住两年 (转载)来一大腕面过过瘾巅峰对决(3P)大学生发明变形婴儿车能推能骑 获全国大奖拜托不要一稿两投好不好Re: 一个有趣的发现 (转载)重庆言子,有点脏。。但是太好笑了。。。。太好笑了同学的QQ签名留学生经典语录……半夜两点成功笑抽……均是经典……英语不好的……要好好看了……(来自人人博客)请理性抗日upgraded wall-e公司组织架构你好吗?我很好lenovo退货系统脑残啊 (转载)照相百态图 (转载)习主席,你在哪里?真的假的? 小姐当官!今天最大的亮点就是沒有ipad mini (转载)