【问题标题】:Return by reference inside a switch statement [duplicate]在switch语句中通过引用返回[重复]
【发布时间】:2016-03-17 16:26:01
【问题描述】:

我想通过引用开关内的变量返回,例如:

sometype & getbar();

void foo() {
        switch ( {statement} ) {
        case {statement}:
            sometype & handle = getbar();
        ...

但我遇到了编译器错误:

“标识符”的初始化被“案例”标签跳过

“默认”标签跳过“标识符”的初始化

而且看起来不可能这样做:

void foo() {
        sometype & handle;
        switch ( {statement} ) {
        case {statement}:
            handle = getbar();
        ...

因为引用变量需要初始化。

有没有办法通过保留 switch 语句来做到这一点?

【问题讨论】:

    标签: c++ c++11 syntax reference switch-statement


    【解决方案1】:

    是的,有。将 case 语句的主体括在括号中,如下所示:

    case {statement}:
    {
        sometype & handle = getbar();
        ...
    }
    

    【讨论】:

    • 哇,它有效!有什么区别?
    • @kuhaku,案例是特殊标签,C++ 不允许您通过跳转到标签来跳过变量初始化。
    • @kuhaku - case 语句就像标签,由 switch 条件跳转。这意味着整个 switch 表达式只有一个作用域。如果在此范围内有任何变量的初始化可以“跳过”,编译器会报错,因此通过使用括号创建新范围,变量初始化错误/警告得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多