由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - copy constructor 的问题
相关主题
请教一个C++问题C++ Q61: 如何对const data member做assignment?
包子呼唤大牛--问关于C++Destructor的问题 (转载)a very general c++ question
问个构造函数的问题C++: Q75 copy constructor 问什么用 const reference?
这个拷贝构造函数有什么问题?问个C++ 编译器临时变量的问题
leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}请教一个const和non const的C++问题
问个关于java和C++的问题C++ Question
问几道面试中遇到的C++问题汗,不问算法
const_reverse_iterator和reverse_iterator有什么区别?C++面试问题,高人请进啊~~~
相关话题的讨论汇总
话题: const话题: copy话题: 调用话题: temp
进入JobHunting版参与讨论
1 (共1页)
n******m
发帖数: 169
1
Code 1
E***n
发帖数: 166
2
我编译了你的code 2
结果:
error: no matching function for call to 'A::A(A)'
我估计是因为你用的参数是1, 1是const

【在 n******m 的大作中提到】
: Code 1
h**k
发帖数: 3368
3
如果去掉A(A&){cout<<"copy con";},应该能编译成功。

【在 n******m 的大作中提到】
: Code 1
n******m
发帖数: 169
4
是的,问题就是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 做了些什么,但是却没有调用它。。。十分不解。而且
报出来的错相当看不明白。
y**i
发帖数: 1112
5
主要的问题在于编译器认为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 做了些什么,但是却没有调用它。。。十分不解。而且
: 报出来的错相当看不明白。

n******m
发帖数: 169
6
恩,你说得跟实际结果完全一样。
但是我还是不解,如果我是编译器,我看到 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

1 (共1页)
进入JobHunting版参与讨论
相关主题
C++面试问题,高人请进啊~~~leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}
问一个关于引用和指针的问题问个关于java和C++的问题
nVidia phone interview (intern Infrastructure Arch)问几道面试中遇到的C++问题
问个C++ ctor的问题const_reverse_iterator和reverse_iterator有什么区别?
请教一个C++问题C++ Q61: 如何对const data member做assignment?
包子呼唤大牛--问关于C++Destructor的问题 (转载)a very general c++ question
问个构造函数的问题C++: Q75 copy constructor 问什么用 const reference?
这个拷贝构造函数有什么问题?问个C++ 编译器临时变量的问题
相关话题的讨论汇总
话题: const话题: copy话题: 调用话题: temp