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 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 是的,问题就是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 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 是的,问题就是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 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 主要的问题在于编译器认为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 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 主要的问题在于编译器认为a=1的语句会去调用哪一个函数,一般a=1实际上是要去隐式
: 调用构造函数,除非你声明你的第一个构造函数A(int)为explicit。这里似乎如果你声
: 明copy构造的参数为非const的时候,造成了声明的歧义,A a=1的语句试图去匹配这个
: 构造函数,变成了类似A temp(1), a(temp);但声明为const就不会造成这种歧义,让a=
: 1直接去寻找A(int)的signiture
相关阅读
笑到窒息的事Re: 图,关之琳56岁生日,美得不像话,秒杀刘晓庆 (转载)说下哈工大的压力面试你喝的可乐,味道像不像借你的5000块钱一个耳光抽小将脸上。小将:你太怂 (转载)全家都爱看书,爸爸爱看秘书扒皮中概的黑庄 (转载)彩礼就是那扯不断的封建残余把生活过成段子不容易色情女星说总统的龟头像个小蘑菇! (转载)老刘饭局门的小A如果换成廖蕾,奶茶绝对地位难保来军版一抓一个准! (转载)鸡犬升天!王思聪爱犬坐豪车亮相 保安开道 (转载)kavanaugh的65个女人突然消失了 (转载)山竹过后,朋友良心发现要还钱了???(结局笑死你)定了!《定于一尊》在国际上如何表述,党媒给出答案 (转载)有一个小国,男人想娶二奶,得被大老婆打100下从一个老段子想到。。(搞笑)如果你老公非要出门会狐朋狗友,教你一招绝杀他!!!网上买了一只“魔王松鼠”,店家说不咬人,结果他手指被咬鲜血