![]() |
1
4
我同意你所说的。cppreference上有一个讨论页面,您可以在其中提出您的担忧。更好的表达方式可能是
正如您所说,对象不再由prvalues返回或传递。 |
![]() |
2
3
引用的文本指出,有一个对象的值设置为函数的返回值:返回时使用C++17的保证省略 按价值 ,该对象将类似于调用者创建的变量、调用者放置的向量中的元素或push\u备份,或在调用者编排的动态分配内存中构造的对象。你把这和一个临时的混淆了,正如你所说,这可能不涉及。 系统地研究它,你引用了cppreference的一句话。。。
。。。那个
C++17标准在[basic.lval]中说:
那么,在CPP参考文本中,标准术语是什么?” 结果对象 “被称为 “函数返回的对象” 。这种语言在说结果对象是“返回的”而不是“初始化的”时有点不准确,但总体来说,这不会产生误导,而且由于避免了另一点术语,大多数cppreference读者可能更容易理解。我并不积极参与该网站,但作为一名普通用户,我的印象是cppreference试图准确解释标准的本质,但尽可能简化语言。 虽然标准没有明确说明底层机制,但优化/ABI的实用性决定了不同的实现,为了了解标准在功能上需要什么,它需要 可以 帮助想象编译器实现如下代码。。。
。。。通过秘密地将返回对象地址的内存传递给函数(与
因此,被调用函数涉及并构造了一个对象,但忽略了它的位置,即调用方指定的内存地址。如果调用方未使用函数调用结果,则至少会在概念上构造一个临时函数,然后将其销毁。 |