【发布时间】:2016-07-11 18:53:14
【问题描述】:
考虑以下几点:
std::unordered_map<int, std::array<float,50>> foo;
...
auto pointerToArray = foo.at(3).data();
- 1)
pointerToArray在引用时属于哪个类别 失效规则、迭代器或引用? - 2)
pointerToArray失效的风险是什么 (假设它在foo中的配对密钥没有被删除)? - 3) 这些问题的答案有什么不同(如果有的话)
unordered_map和map之间的问题?
与vector 不同,array 本身不会重新分配,因此不存在自行更改内存地址的风险,但由于它位于无序/映射内部,因此情节变厚了。
更新:发现 another question 表明在这种情况下不存在失效风险。
【问题讨论】:
-
我很清楚这与使指向结构的指针无效。
-
您不应该考虑风险。要么有效,要么无效。
-
我不明白your second link 怎么没有回答你的问题。指向某物的指针与对某物的引用基本相同。
-
@NathanOliver 我想部分混淆是当我在示例中未使用任何 C++ 引用时标准对“引用”一词的使用,因此是我的第一个问题。编辑:我看到您刚刚更改了评论以回答此回复中的问题。
-
@johnbakers 通常一个引用被实现为一个指针。所以你可以在这种情况下互换它们。