gpt4 book ai didi

c++ - 分配给数组成员时 Clang 中的 "Read-only variable is not assignable"

转载 作者:搜寻专家 更新时间:2023-10-31 00:00:42 26 4
gpt4 key购买 nike

我有一些代码涉及通过 std::hash_set 进行迭代,如下所示:

typedef std::hash_set< VEdge, VEdge > MyHashSet;
MyHashSet hs;

for( int i=0; i < numFaces; ++i )
{
VEdge myEdge( someValue, someOtherValue );

MyHashSet::iterator it = hs.find(myEdge);

if ( it->face[0] == -1 )
it->face[0] = i; // Error: "Read-only variable is not assignable"
}

我已经更改了代码以简化它,但您可以大致了解它在做什么。 VEdge 在结构中定义,该结构将 int face[2] 作为其成员之一。我遇到的问题是 Clang 告诉我 it->face[0] 是只读的,即使这个相同的代码适用于 MSVC(或者我被告知)。 Clang 有什么东西意味着我必须以某种方式将 face 变量定义为可写的吗?

最佳答案

hash_set 类是非标准的。 Microsoft 的版本允许您通过 iterator 修改对象的内容,但是 SGI 的版本(我猜您正在使用 Clang 的版本)具有 iteratorconst_iterator 为同一类型,这意味着您不能通过迭代器修改容器的内容。

这也是一样的,因为容器中对象的位置由它们的哈希值决定,而它们的哈希值由它们的值决定。更改它们的值需要更改它们的位置,但哈希集无法检测到您正在更改它们的值,因此容器会不一致。 (也许你正在修改的成员并没有真正影响散列,但是 hash_set 没有办法知道这一点。如果你修改内容,微软的版本可能会留下未定义的行为,而 SGI 禁止操作完全。)

关于c++ - 分配给数组成员时 Clang 中的 "Read-only variable is not assignable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12478432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com