分配给数组成员时在 Clang 中"Read-only variable is not assignable"
"Read-only variable is not assignable" in Clang when assigning to an array member
我有一些代码,其中涉及迭代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一起使用的版本,iterator
和const_iterator
是同一类型,这意味着你不能通过迭代器修改容器的内容。
因为容器中对象的位置由它们的哈希值决定,而它们的哈希值由它们的值决定。更改其值需要更改其位置,但哈希集无法检测到您正在更改其值,因此容器将不一致。(也许您正在修改的成员并没有真正影响哈希,但hash_set
无法知道这一点。如果您修改内容,Microsoft的版本可能会未定义行为,而 SGI 则完全禁止该操作。
相关文章:
- C++ Singleton - Prevent ::instance() to variable
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 如何通过多类"Union variable" (sfml) 使用轮询事件
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- write() 和 read() 中几乎没有混淆
- C++:寻找"returning address of local variable..."的更正
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 对同一文件使用 .read 的次数是否有限制?
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- C++ - 在我尝试制作一个简单的计算器时有一个"uninitialized local variable y used"警告
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 分配给数组成员时在 Clang 中"Read-only variable is not assignable"
- 如何使QRadio按钮"read-only"?
- decltype - "the only context in which a variable defined as a reference is not treated as a synonym
- 在C++中:常量引用意味着"read-only view of"还是需要被引用对象的不可变性?