如何解决C ++为什么不能将此指针保存到引用?
我希望获得一个指向映射的值元素(结构)的指针,并将该指针保存在向量中。
第二个示例出了什么问题?
示例1(编译但语义错误)
vector<Tstruct*> myvector {};
for (const map<int,Tstruct> &kv : mymap) {
auto y = kv.second; // a copy
myvector.push_back(&y); // ok! &y is a Tstruct*,but this is a pointer to a copy
}
示例2(不编译,但旨在显示预期的语义)
vector<Tstruct*> myvector {};
for (const map<int,Tstruct> &kv : mymap) {
myvector.push_back(&kv.second); // &kv.second is not a valid argument here (why?)
}
我意识到这肯定是一个新手问题,但是四处搜寻,无法准确找出。我知道“引用X的地址” =“ X的地址”,所以这似乎有些奇怪。
解决方法
在您的for
循环中,kv
被声明为const
,因此kv.second
字段是const Tstruct
。取其地址将产生一个const Tstruct*
指针。但是vector
想要一个非常量Tstruct*
指针。这就是为什么您的第一个示例起作用而您的第二个示例失败的原因。
请注意,您的第一个示例为vector
提供了指向本地Tstruct*
的指针,该指针在推送后立即超出范围,而vector
则带有悬空指针。 / p>
如果mymap
不是const
,则kv
不必是const
,或者:
for (map<int,Tstruct> &kv : mymap) {
myvector.push_back(&kv.second);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。