Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在交换机的情况下使用右值引用_C++_Switch Statement_Rvalue Reference - Fatal编程技术网

C++ 如何在交换机的情况下使用右值引用

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

我想在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<<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不是。