MST

星途 面试题库

面试题:C++中如何扩展switch参数类型

在C++ 17之前,switch语句的参数类型通常局限于整型、枚举型等基本类型。请描述在C++ 17引入了哪些新特性来扩展switch参数类型,并且举例说明如何使用新特性来处理字符串类型作为switch的参数。
49.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

C++ 17 引入的新特性

C++ 17引入了switch语句的constexpr if特性以及std::string_view,使得可以处理更多类型作为switch的参数,包括字符串类型。std::string_view是一个轻量级的、非拥有式的字符串视图,它提供了对字符串内容的高效访问,并且可以在编译期计算其哈希值,这对于switch语句处理字符串类型至关重要。

示例代码

#include <iostream>
#include <string_view>

int main() {
    std::string_view str = "world";
    switch (str) {
    case std::string_view("hello"):
        std::cout << "Hello case" << std::endl;
        break;
    case std::string_view("world"):
        std::cout << "World case" << std::endl;
        break;
    default:
        std::cout << "Default case" << std::endl;
        break;
    }
    return 0;
}

在上述代码中,通过std::string_view将字符串以视图的形式传递给switch语句,编译器可以在编译期计算std::string_view的哈希值,从而实现对字符串类型的switch分支判断。