c++临时对象大剖析?

winnuke winnuke 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
关键字:l-value、 r-value、 const value、temporary and it's

scope


前几天有人发现这样一段代码在g++和vc6下编译结果不同
http://topic.csdn.net/u/20091113/19/ec6af899-cb1a-4a81-92b7-0ab2bc8c2f24.html

其中一个重要问题就是临时对象的问题。
之后自己对临时对象这个以前很少注意到的东西越想越投入,而且发现这个

东东似乎比构造、析构、拷贝构造、赋值等c++的一些自动化特性更多地被应

用在代码中且各大编译器对此的支持程度不一。
目前有几个问题到现在还不是很清楚,特列出来请大家指点:

1:临时对象在什么情况下产生?标准有没有规定?
2:临时对象的作用域或者生命周期是怎么样的?
3:临时对象到底是不是右值?
4:如果临时对象作为一个右值,可不可以修改?或者说右值是不是const或

者常量?
5:右值是否不可以被关联到非常量(const)引用?为什么?

请大神小虾们各抒己见。先写个类以供大家讨论使用:

#include <iostream>
using std::cout;
using std::endl;

class A
{
public:
A(int i)
: m_i(i)
{
cout << "A(" << m_i << ")" << endl;
}

~A()
{
cout << "~A(" << m_i << ")" << endl;
m_i = 0;
}

A(const A& a)
: m_i(a.m_i)
{
cout << "A(A(" << m_i << "))" << endl;
}

A& operator=(const A& rhs)
{
cout << "A(" << m_i << ")" << "=A(" << rhs.m_i << ")" << endl;
m_i = rhs.m_i;
return *this;
}

A& operator--()
{
cout << "--(" << m_i << ")" << endl;
--m_i;
return *this;
}

private:
int m_i;
};

A GetA(int i)
{
A a(i);
return a;
}

int main()
{
A la1(1);
A ra2 = --GetA(2);
--ra2;
A ra3 = GetA(3);
A ra4 = GetA(4);
A* pa = &GetA(5);
return 0;
}

...全文

相关推荐

详解C++ 中的临时对象

然而,由于编译器优化,实际可能只会调用一次拷贝构造函数,避免了额外的临时对象复制。临时对象的管理和优化是C++性能调优的重要方面,理解其工作原理可以帮助编写更高效、更符合C++标准的代码。

weixin_38591223

小问题大思考之C++ 临时对象

在C++编程中,临时对象(Temporary Object)是一种在代码中并不直接声明,但由编译器自动创建的对象。它们通常出现在类型转换、按值传递、按值返回和对象定义等场景,对程序性能有着重要影响。理

weixin_38693753

C++l临时对象

### C++中的临时对象#### 一、引言在C++编程中,临时对象是一个非常重要但又常常被忽视的概念。这些对象虽然不直接出现在源代码中,但在编译器生成的目标代码中却扮演着至关重要的角色。

麻绳Lee工

深入c++中临时对象的析构时机的详解

深入理解C++中临时对象和具名对象的析构时机在C++中,对象的生命周期和析构函数的调用是程序设计中的关键概念。当我们创建对象时,会涉及到构造函数的执行,而在不再需要对象时,析构函数则负责释放其占用

weixin_38554781

详解C++ 临时量与临时对象及程序的相关优化

总之,理解和掌握C++中的临时量与临时对象及其生命周期是编写高效代码的关键。通过优化临时对象的使用,可以显著提高程序性能,减少内存开销。

weixin_38542223
评论 26
收藏 已收藏
分享
返回顶部
winnuke
C++ 语言 65,214 成员 250,514 内容