Nam*_*ami 7 c++ rvalue decltype lvalue
根据C++ Primer,C++箭头运算符产生左值.另外 decltype ,产生左值的表达式将导致引用类型.那么,为什么下面decltype并不会导致引用类型.
struct MyStruct {
string name
};
MyStruct s;
s.name = "aname";
MyStruct* p = &s;
decltype (p -> name) str = s.name; //type of str will be string and not &string although p -> name yields an lvalue
Run Code Online (Sandbox Code Playgroud)
如果参数是未加密码的id-expression或未加括号的类成员访问,则decltype将生成此表达式命名的实体的类型.如果没有这样的实体,或者参数命名了一组重载函数,则程序格式不正确.
在您的示例中就是这种情况,因此它将返回成员的基础类型,即std::string.
如果需要,可以添加括号,以便decltype产生引用:
//'str' is a std::string&
decltype((p->name)) str = s.name;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |