最近会看到一些c++17语法 想说来研究一下
https://en.cppreference.com/w/cpp/language/structured_binding
网络上介绍的文章许多 但都完全只是"介绍" 我实际上遇到一些怪异的型别推导结果
完全无法归纳规则 可能变成 知道可以用 但不敢乱用....
也许cppref 有介绍的很完整但我实在是看不太懂他表达的
举几个例子
1. 这属于网页上的case几?我不知道....
std::map<int, int> m;
for (auto& [k, v] : m) {
k = 123;
}
k 是const& 变成不能改 ??? why....
好那我
std::map<int, int> m;
for (auto [k, v] : m) {
k = 123;
}
k是const int....哪来的const....
2.
int a = 1, b = 2;
const auto& [x, y] = std::tie(a, b);
x = 5566;
一脸就是const! 但竟然x是 int&.....可以改 why....+2
好那我
auto [z, w] = std::tie(a, b);
z = 123;
我什么都不加....乍看就是int
z竟然是int&....我不小心改到了a.....
这我可能还可以理解 他会去decltype(z) 结果是int& 但实在不好读也很容易误用
还有很多看不是很懂...
总觉得找不到可以简单记忆的规则 连VC鼠标移过去显示的型态也是错的....
请问版上有人能通透理解这些规则吗@@
不然我还是觉得写17以前写法
for (const auto& p : map) 我可以明确知道他在写什么好懂许多
讨论一下~
谢谢