如何在 switch 的情况下使用右值引用

how to use a rvalue reference in a switch's case

我想在 switch(T) 的情况下使用 t(右值引用),但出现错误 the value of 't' is not usable in a constant expression。如何以正确的方式做到这一点。

#include <iostream>
using namespace std;
int main(){
    int (&&t)=5;
    int T{};
    switch(T){
        case t:   // error in this case
            cout<<t<<endl;
            break;
        default:
            cout<<"default"<<endl;
            break;
    }
}

注意switch语句中的case labels需要是常量表达式。

您不能将右值引用用作大小写标签,因为它不是常量表达式。但是,您可以使用编译时初始化变量:

constexpr int t = 5;
switch(...)
{
  case t : ...  // ok
}

请注意,尝试执行以下操作:

int const &&t = 5;

也不会起作用,因为初始化器不是常量表达式,所以我知道无法使用右值引用作为 case 标签。

另请注意,类似于:

int const t = ...

除非初始化程序是常量表达式(即在编译时已知),否则将不起作用。所以:

int const t = 5;

会起作用,但是:

int n = 5;
int const t = n;

不会。