C++ 如何在交换机的情况下使用右值引用
我想在switchT的情况下使用trvalue引用,但是我得到一个错误,'t'的值在常量表达式中不可用。如何以正确的方式做C++ 如何在交换机的情况下使用右值引用,c++,switch-statement,rvalue-reference,C++,Switch Statement,Rvalue Reference,我想在switchT的情况下使用trvalue引用,但是我得到一个错误,'t'的值在常量表达式中不可用。如何以正确的方式做 #include <iostream> using namespace std; int main(){ int (&&t)=5; int T{}; switch(T){ case t: // error in this case cout<<t<<end
#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语句中的表达式必须是常量
不能将右值引用用作大小写标签,因为它不是常量表达式。但是,您可以使用编译时初始化变量:
constexpr int t = 5;
switch(...)
{
case t : ... // ok
}
请注意,尝试执行以下操作:
int const &&t = 5;
int const t = ...
也不起作用,因为初始值设定项不是常量表达式,所以据我所知,没有办法让您使用右值引用作为大小写标签
另外,请注意:
int const &&t = 5;
int const t = ...
除非初始值设定项是一个常量表达式,即编译时已知的表达式,否则将不起作用。因此:
int const t = 5;
将起作用,但:
int n = 5;
int const t = n;
不会。恕我直言,你的例子毫无意义。你又想实现什么?为什么要打开一个未初始化的变量?你希望这有什么好处?你希望这个程序打印什么?为什么?我想了解右值引用。I is unitialized switch将使用它的默认大小写。不,从未初始化的变量读取是未定义的。糟糕,编译器告诉过你,我现在还没有初始化。5是一个常量表达式。t不是。