C++11 枚举只能通过正确的引用传递

C++11 枚举只能通过正确的引用传递,c++11,C++11,我想请某人解释一下,为什么枚举只能通过正确的引用传递,而不能通过简单的引用传递 namespace n1 { enum e1 { f = 1, f1 }; } void f(n1::e1&& e) { std::cout<<static_cast<int>(e); } int main() { f(n1::e1::f1); return 0; } 名称空间n1 { 枚举e1

我想请某人解释一下,为什么枚举只能通过正确的引用传递,而不能通过简单的引用传递

 namespace n1
{
    enum e1
    {
        f = 1,
        f1
    };
}
void f(n1::e1&& e)
{
    std::cout<<static_cast<int>(e);

}
int main()
{
   f(n1::e1::f1);
    return 0;
}
名称空间n1
{
枚举e1
{
f=1,
f1
};
}
空f(n1::e1和e)
{

std::cout
enum
s是常量,因此不能将其视为
n1::e1&
,而应视为
const n1::e1&

void f(const n1::e1& e) {
    std::cout<<static_cast<int>(e);
}
void f(常数n1::e1&e){

std::cout
enum
s是常量,因此不能将其视为
n1::e1&
,而应视为
const n1::e1&

void f(const n1::e1& e) {
    std::cout<<static_cast<int>(e);
}
void f(常数n1::e1&e){

std::cout枚举是整型常量

  • 函数的枚举参数必须是常量
备注:您不必强制转换枚举来打印他的值


空f(常数n1::e1&e){

std::cout枚举是整型常量

  • 函数的枚举参数必须是常量
备注:您不必强制转换枚举来打印他的值


空f(常数n1::e1&e){

你能解释一下“Rem”是什么意思吗?是“提醒”还是“记住”,还是其他什么意思?你能解释一下“Rem”是什么意思吗是指?是“提醒”还是“记住”还是其他?您应该使用枚举类而不是命名空间/枚举模式,或者忽略强制转换并通过使用此模式来欺骗lil,这样您就不必强制转换。您应该使用枚举类而不是命名空间/枚举模式,或者忽略强制转换并通过使用此模式欺骗lil,以便你不必强制转换它。同意答案,但我建议按值传递
enum
(或任何其他小对象,如
std::span
std::string\u view
等)。@Quarra当它是
const
时,绝对同意答案,但我建议传递
enum
(或任何其他小对象,如
std::span
std::string\u view
等)的值。@Quarra当它是
const
时,绝对正确。