考虑不涉及copy-elision的情况(在C++ 17之前)。MyClass obj = MyClass(); 'MyClass()'在这里引用临时对象吗?
从cppreference(再次,假设C++ 14):
- 参考结合于prvalue
- 返回从prvalue:
临时对象在以下情况下产生功能
- 创建预估值的转换
- lambda表达式
- 副本初始化,需要初始化
- 列表初始化该构建一个std :: initializer_list
- 参考初始化到一个不同的,但可转换类型或一个位域的转换。
所有除了第一个案例似乎无关紧要,第一个似乎意味着C++ - 样式的引用结合(int &&x = 5;
BTW我没有在这样的情况下理解语句临时工在年底销毁完整表达...,对象5指的是在声明结尾似乎没有被破坏)。
所以,据我了解,临时对象的概念只包括那些被保证存储的人(在我的情况下,由于可能的影响,情况并非如此)。我对么?否则我在这里误解了什么?
BTW是有在int x = 4;
MyClass()
和4
(或int x = 2 + 2;
2 + 2
)之间的任何差异?就像也许我是不正确的,第一个是指一个临时对象,而另外两个不是......
它下的“转换,创建一个prvalue”情况计数。 (是的,它看起来不像是一种转换,而是标准组合T(),T(1)和T(1,2)。) –
@ T.C。那么这样的事情只是为了'MyClass()'的情况而已?不是以我提出的'4'为例吗?那么这种差异的基本原理是什么?也许你可以创建一个答案?..考虑到你似乎与现有的矛盾.. – ledonter
不会仍然被“转换创造一个价值”所覆盖?在这种情况下,它是从整数文字转换为一个前值整数。 –