xml*_*lmx 13 c++ rvalue rvalue-reference move-semantics 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?
}
Run Code Online (Sandbox Code Playgroud)
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是左值,则E1.E2是左值; 否则E1.E2是xvalue.
迂腐地说,最初C++ 11将其归类为prvalue,但这种分类没有意义,所以它被改变了.但是,如果更改是由缺陷报告应用的,那么它是追溯性的 - 已发布的C++ 11标准文档N3290是错误的,而C++ 14文档则定义了C++ 11.这可能就是这种情况,否则需要编译器实现-std=c++11和之间行为的细微差别-std=c++14.我现在懒于搜索DR.
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |