【发布时间】:2018-06-20 09:05:22
【问题描述】:
我正在阅读this post。注意的代码如下
struct S {
void func() &;
void func() &&;
};
S s1;
s1.func(); // OK, calls S::func() &
S().func(); // OK, calls S::func() &&
我想我理解了引用限定符是什么。我的问题更基本:S() 是什么?它是(复制)创建者吗?为什么它是右值?似乎在那个博客和其他地方,它被认为是理所当然的。我错过了什么?
【问题讨论】:
-
表达式
S()是(临时)S对象的value initialization。 -
S()是S myS就像3是int I(3);或更准确地说,int(3)是int I(3)。 S() 调用构造函数,但是因为您没有输入变量名,所以它被创建为临时或右值。 [可悲的是,S myS()会是一个更好的例子,但由于最令人头疼的解析,它实际上声明了一个名为 myS 的外部函数,该函数返回一个 S 类型的对象]。
标签: c++ c++11 constructor rvalue