我有一个容器shared_ptr<>
,例如Avector<shared_ptr<string>>
v
我想迭代一下v
表明常量。
这段代码:
vector<shared_ptr<string>> v;
v.push_back(make_shared<std::string>("hallo"));
...
for (const auto &s : v) {
*s += "."; // <<== should be invalid
}
looks就像我想做的那样(表明s
is const
)但当然它不会使字符串const
.
有没有一种优雅的方式来迭代容器shared_ptr
这表明内容不会被修改?
就像是
for (shared_ptr<const string> s : v) {
*s += "."; // <<== will not compile
}
(但是由于其他原因该代码无法编译:))
Edit:
我犯了一个错误。最初我声明了一个引用,这导致了编译器错误
for (shared_ptr<const string> &s : v) { // <<== does not compile
...
}
如果你声明一个shared_ptr<const string>
该示例有效。在我看来,这是一个很好的权衡,但这样指针就会被复制,这在代码很少和容器很大的循环中可能会很耗时。
这是 C++ 的一个众所周知的限制,但有些人并不认为这是一个限制。
你想要迭代const
确实如此,但不可变指针并不意味着不可变指针对象。
方式shared_ptr<string>
和类型shared_ptr<const string>
实际上是不相关的。
Option 1
for (const auto& ptr : v) {
const auto& s = *ptr;
s += "."; // <<== is invalid
}
Option 2
只是不要修改它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)