avatar
E*n
3
我编译了你的code 2
结果:
error: no matching function for call to 'A::A(A)'
我估计是因为你用的参数是1, 1是const

【在 n******m 的大作中提到】
: Code 1
avatar
h*k
4
如果去掉A(A&){cout<
【在 n******m 的大作中提到】
: Code 1
avatar
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 做了些什么,但是却没有调用它。。。十分不解。而且
报出来的错相当看不明白。
avatar
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 做了些什么,但是却没有调用它。。。十分不解。而且
: 报出来的错相当看不明白。

avatar
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

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。