C++17(1) : 结构化绑定(Structured Bindings)

本文介绍了C++17的新特性——结构化绑定,该特性使得可以直接通过对象或结构体成员初始化多个变量,提高代码可读性。结构化绑定适用于接收函数返回的结构体、类对象和数组等。文章讨论了其常规用法,高级用法,以及在使用中需要注意的细节,并提及了与之相关的decltype(auto)和if constexpr等语法。
摘要由CSDN通过智能技术生成

1、结构化绑定

    结构化绑定允许通过对象、结构体的成员来初始化多个变量,例如

struct Mystruct{
    int i = 0;
    std::string s = "hello";
}

Mystruct ms;
auto [u, v] = ms;

2、用处

  a、通常用处

    结构化绑定通常应用与接收返回结构体、类对象、数组等包含多个元素的函数返回值。例如:

Mystruct GetStruct(){
    return Mystruct{42, "Hello structured bindings."};
}
auto [id, val] = GetStruct();
if(id > 30){
    std::cout << val << std::endl;
}

    优势在于直接访问这些成员变量,让代码有更好的可读性。

 

  b、更多用处及需要注意的细节

std::unordered_map<std::string, int> s_map{
    {"Hello", 1},{"World", 2}};

//优点:可读性更好。
void PrintMapOld(){
    std::cout << "This is old style." << std::endl;
    for(const auto& item : s_map){
        std::cout << item.first << " : " << item.second << std::endl;
    }
}

void PrintMapcpp17(){
    std::cout << "This is cpp17 style." << std::endl;
    for(const auto& [name, value] : s_map){
        std::cout << name << " : " << value << std::endl;
    }
}

struct B{
    int a = 1;
    int b = 2;
};

struct 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值