别人的帖子,我没看懂,能帮忙解答一下吗?

caddor 2011-11-09 07:40:13
貌似是昨天的帖子,原帖地址:http://topic.csdn.net/u/20111108/17/cabc1d5d-302c-43ae-b833-72253ef2a687.html


#include <iostream>
using namespace std;
class T{
public:
int n;
T()
{
std::cout<<"T()"<<std::endl;
n=0;
};
T(int n){
std::cout<<"T("<<n<<")"<<std::endl;
this->n=n;
};
T(T &other) {
std::cout<<"T(T&)"<<std::endl;
this->n = other.n;
};

operator int(){
std::cout<<"operator int()"<<" return "<<n<<std::endl;
return n;
};

};

int main()
{
T x=T(30);
system("pause");
return 0;
}


1.

T(30)表示什么意思,有个构造函数是:T(int n)这样就构造了一个 无名对象,

T x=T(30); 不就是一个 先构造一个无名对象,然后调用拷贝构造函数,去构造 新对象x

,可是结果我就不说了,,完全没有进入:拷贝构造函数。。。。。。


有人回答:因为T(T &other)这里没有const导致的,

我说说,我的对const 引用的理解:临时对象,传参数的时候,那么拷贝构造必须是cosnt&。。。。

T x=T(30)不就相当于:T x(T(30)嘛? T(30)不是临时对象吧? 不加cosnt,也可以啊。。。。对不?



问题2:

操作符的重载,operator int(),这种操作符,惭愧,没研究过, 只记得CString有一个LPCTSTRING()

这种操作符函数何时被调用,我的里理解是int a=(int)T对象,这样会被调用

为什么有人回帖, T x=T(30)会去调用 operator int()呢????



没分了,就四十五分的可用分,,谢谢了啊



...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
caddor 2011-11-09
  • 打赏
  • 举报
回复
我说错了,二者的区别,看代码吧:

匿名对象的例子:



#include <iostream>
using namespace std;


class A
{
public:
A(){}
virtual ~A(){}
public:
A(A&obj){}
};


int main()
{

A b(A());
system("pause");
return 0;
}


dev c++通过

临时对象:


class A
{
public:
A(){}
virtual ~A(){}
public:
A(A&obj){}
};

A f()
{
return A();
}

int main()
{

// A b(A());
system("pause");
return 0;
}


dev通过


可见 二者还是有区别的啊 拷贝构造,我把 const去掉了

对于临时对象而言,么有const,无法通过

匿名对象,没有cosnt也能通过









[Quote=引用 3 楼 caddor 的回复:]
听你这么一说,我脑袋乱哄哄的

临时对象,和匿名(无名)对象,有什么区别呢?

我的理解一回事啊

都是没有名字的,



引用 1 楼 mingliang1212 的回复:
说错了。应该说内置类型的临时对象不是左值,所以不能用来初始化非常量引用。而自定义类型的临时变量是左值。。。所以我也不知道。。。。
[/Quote]
caddor 2011-11-09
  • 打赏
  • 举报
回复
听你这么一说,我脑袋乱哄哄的

临时对象,和匿名(无名)对象,有什么区别呢?

我的理解一回事啊

都是没有名字的,


[Quote=引用 1 楼 mingliang1212 的回复:]
说错了。应该说内置类型的临时对象不是左值,所以不能用来初始化非常量引用。而自定义类型的临时变量是左值。。。所以我也不知道。。。。
[/Quote]
pengzhixi 2011-11-09
  • 打赏
  • 举报
回复
T(30)匿名对象

什么时候会调用?比如
void fun(int a);

T obj;
fun(obj);
iamnobody 2011-11-09
  • 打赏
  • 举报
回复
说错了。应该说内置类型的临时对象不是左值,所以不能用来初始化非常量引用。而自定义类型的临时变量是左值。。。所以我也不知道。。。。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧