【发布时间】:2019-12-31 07:06:12
【问题描述】:
例子:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
编译时出现以下错误:
<source>: In function 'int main()':
<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'
func(clr);
^~~
我认为传递给 func(unsigned int&) 的变量 (clr) 是一个左值。我可以得到clr 的地址,并可以为其分配另一个值。为什么当我尝试将它传递给func(unsigned int&) 时它会变成右值?
【问题讨论】:
-
问问自己:
enum是unsigned int吗? -
@NathanOliver-ReinstateMonica 在我最初的看法中,我认为
typedef enum不是原生类型,C++ 确实会将其视为unsigned int类型。 -
GCC 的错误信息在这种情况下不是最理想的。 Clang 将通过打印
clr的原始类型来提供一个不那么令人困惑的消息。 -
@cpplearner 是的,这就是为什么我认为
enum type在 C++ 中被视为unsigned int。 -
enum X是它自己的类型,不同于int
标签: c++ c++11 rvalue-reference rvalue lvalue