如何在 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;
不会。
我想在 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;
不会。