例如:
Beta_ab&&
Beta::toAB() const {
return move(Beta_ab(1, 1));
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码(简化版):
const int& function( const int& param )
{
return param;
}
const int& reference = function( 10 );
//use reference
Run Code Online (Sandbox Code Playgroud)
我不能完全决定C++ 03标准在12.2/5美元的措辞
引用绑定的临时对象或作为临时绑定的子对象的完整对象的临时对象在引用的生命周期内持续存在...
适用于此.
是reference在上述有效或晃来晃去的代码变量?调用代码中的引用是否会延长作为参数传递的临时值的生命周期?
我想我理解具有如下签名的函数:
void f(std::string&&):
Run Code Online (Sandbox Code Playgroud)
它将应用于右值以重用其资源。然而,我偶尔会看到这样的代码:
std::string t();
std::string&& s = t();
Run Code Online (Sandbox Code Playgroud)
其中变量被初始化为右值引用。(这里我写了 t 按值返回,但如果按左/右值引用返回时行为不同,有兴趣知道)。
通常,我在有关 C++ 的帖子/谜题中看到这一点,而不是在生产代码中。
我有几点想了解一下:
我知道这一点const,并且volatile在 C++ 规范中被称为“cv 限定符”,例如[basic.type.qualifier]。
现在我有这段代码(godbolt)无法编译。
#include <string>
class Dummy
{
std::string member{"test"};
public:
std::string const && foo() &&
{ return std::move(member); }
};
int main()
{
Dummy d;
std::string s = d.foo();
}
Run Code Online (Sandbox Code Playgroud)
它无法编译,因为w它是一个 LValue 并且foo()仅针对 RValue 存在。这很好,也是意料之中的。
但让我们看一下错误消息:
<source>: In function 'int main()':
<source>:14:26: error: passing 'Dummy' as 'this' argument discards qualifiers [-fpermissive]
14 | std::string s = d.foo();
| ~~~~~^~
<source>:7:26: note: in call to 'const …Run Code Online (Sandbox Code Playgroud)