作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到从 std::map
解包键和值不给我引用。我假设 std::map
中的单个条目存储为一对 const 键和值。
什么工作:
.second
一对来自 std::map
成引用。 std::make_pair
制成的成引用。 std::views::values
的结果中获取引用#include <map>
#include <type_traits>
#include <ranges>
int main() {
std::map<int, int> data;
for (const auto& kv : data) {
auto& v = kv.second;
auto& [a, b] = kv;
static_assert(std::is_reference_v<decltype(v)>);
}
for (const auto& v : data | std::views::values)
static_assert(std::is_reference_v<decltype(v)>);
for (const auto& [k, v] : data)
static_assert(std::is_reference_v<decltype(v)>); // error
{
auto& kv = *data.begin();
auto& [k, v] = kv;
static_assert(std::is_reference_v<decltype(v)>); // error
}
{
auto kv = std::make_pair(3, 5);
auto& k = kv.first;
auto& v = kv.second;
static_assert(std::is_reference_v<decltype(v)>);
}
return 0;
}
最佳答案
它是一个引用。但是,有一个特殊的规则,decltype
在结构化绑定(bind)上(来自 [dcl.type.decltype]/1.1 ):
- if
E
is an unparenthesized id-expression naming a structured binding ([dcl.struct.bind]),decltype(E)
is the referenced type as given in the specification of the structured binding declaration;
pair<Key const, Value>
)的引用类型只是
Key const
和
Value
,从来没有任何引用。
关于c++ - 为什么我不能将 std::map 的条目解压到引用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69236159/
我是一名优秀的程序员,十分优秀!