std::variant是什么标准
时间: 2023-02-12 22:43:35 浏览: 82
std::variant是C++17标准中的一种多态类型,它可以存储不同类型的值,并提供了访问和操作这些值的方法。 std::variant是一种轻量级的可空类型,可以用来替代其他复杂的类型转换和错误处理机制。
相关问题
std::get std::variant
std::get是C++标准库中的一个函数模板,用于从std::variant对象中获取指定类型的值。std::variant是C++17引入的一个模板类,它可以存储多个不同类型的值,但在任意给定时间只能存储其中的一个值。
使用std::get函数时,需要提供一个std::variant对象和一个索引,该索引表示要获取的值在std::variant中的位置。如果std::variant中存储的是指定类型的值,则std::get函数返回该值的引用;否则,将抛出std::bad_variant_access异常。
以下是std::get和std::variant的示例代码:
```cpp
#include <iostream>
#include <variant>
int main() {
std::variant<int, double, std::string> var;
var = 42;
int intValue = std::get<int>(var);
std::cout << "Int value: " << intValue << std::endl;
var = 3.14;
double doubleValue = std::get<double>(var);
std::cout << "Double value: " << doubleValue << std::endl;
var = "Hello";
try {
int invalidValue = std::get<int>(var);
std::cout << "Int value: " << invalidValue << std::endl;
} catch (const std::bad_variant_access& e) {
std::cout << "Exception caught: " << e.what() << std::endl;
}
return 0;
}
```
输出结果:
```
Int value: 42
Double value: 3.14
Exception caught: bad_variant_access
```
cpp17的std::variant
std::variant是C++17中的新特性之一,它是一个类型安全的联合体,类似于C++11中的std::tuple和std::pair。std::variant能够存储一组不同类型的值,但只能同时存储其中的一种类型,这使得它比传统的联合体更加安全。
std::variant的语法非常简单,它的定义如下:
```
template<typename... Types>
class variant;
```
其中Types是一组类型列表,表示可以存储的不同类型。创建一个std::variant对象的语法如下:
```
std::variant<int, double, std::string> v;
```
这将创建一个std::variant对象v,它可以存储int、double或std::string类型的值。可以使用std::get函数来获取std::variant对象中的值:
```
std::variant<int, double, std::string> v(42);
int i = std::get<int>(v);
```
这将获取v中的int类型值,并将其赋值给变量i。
std::variant还提供了一些其他的功能,如std::get_if函数、std::visit函数等,这些函数的使用都非常简单,具体可以参考C++17标准库的文档。