是C 11中XVALUE的数据成员
Is a data member of a temporary object an xvalue in C++11?
#include <vector>
using namespace std;
struct A
{
vector<int> coll;
};
void f(const vector<int>&){}
void f(vector<int>&&){}
int main()
{
f(A().coll); // Is "A().coll" an xvalue?
}
C 11保证f(A().coll)
会致电void f(vector<int>&&)
?
是。C 14标准,§5.2.5/4.2,给定E1.E2
:
如果
E2
是非静态数据成员,并且E1
的类型为" cq1 vq1 x ",E2
的类型为" cq2 vq2 t ",该表达式指定了第一个表达式指定对象的命名成员。如果E1
是lvalue,则E1.E2
是lvalue;否则E1.E2
是xvalue。
最初是C 11的
将其归类为prvalue,但这种分类毫无意义,因此已更改。但是,如果变更是通过缺陷报告应用的,则是追溯的 - 已发布的C 11标准文档N3290是错误的,而C 14文档代替了C 11。情况很可能是这种情况,因为否则要求编译器在-std=c++11
和-std=c++14
之间的行为差异很小。我现在懒于通过DRS进行搜索。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将私有数据成员添加到野牛生成的类中
- 输入数据成员未按要求工作
- 二维矢量数据成员
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 调用在 HXX 文件中声明的静态数据成员
- 是否可以根据其数据成员的类型确定类型的大小
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 使公共数据成员在C++中无法访问
- 是C 11中XVALUE的数据成员