根据cppreference.coma.m
是prvalue
the member of object expression, where m is a member enumerator or a non-static member function[2];
它是否意味着对象表达式即a。m其中m是枚举类型的成员,表达式本身的值类别将是纯右值?
根据我下面的测试,似乎不是这样。我错过了什么?
enum class Color : char {
Red = 'r'
};
struct Test {
Color c;
};
void func(Color&&) {
std::cout << "rvalue ref\n";
}
void func(Color&) {
std::cout << "lvalue ref\n";
}
int main()
{
Test t;
func(t.c);
return 0;
}
输出:lvalue ref
2条答案
按热度按时间w46czmvw1#
因此,“enumerator”是枚举的值,而不是枚举类型的对象:https://en.cppreference.com/w/cpp/language/enum
枚举是一种独特的类型,其值被限制在一个值范围内,其中可能包括几个显式命名的常量**(“枚举器”)**。
稍微编辑,以消除绒毛,加粗地雷
所以标准是指当你访问一个类枚举器时,比如:
Here is a live example.
7kqas0il2#
在本例中,
t.c
不是成员枚举器,而是enum
类型的成员变量。成员枚举器应该是这样的:
这将打印
rvalue ref
。t.RED
是一个右值表达式,因为它是不可赋值的,而t.c
不是,因为你可以给它赋值一个右值,比如t.RED
。