在我的程序中,我有一些对象(属于同一类)必须全部具有唯一标识符。为了简单和性能,我选择使用对象的地址作为标识符。为了保持类型简单,我使用 (void*)
作为此标识符的类型。最后我有这样的代码:
class MyClass {
public:
typedef void* identity_t;
identity_t id() const { return (void*)this; }
}
这似乎工作正常,但 gcc 给了我一个严格的别名警告。我知道如果将 id 用于数据传输,代码会很糟糕。幸运的是它不是,但问题仍然存在:别名优化是否会对生成的代码产生影响?以及如何避免警告?
注意:我不愿意使用(char*)
,因为这意味着用户可以使用数据进行复制,而事实并非如此!
最佳答案
您可以尝试使用类型 uintptr_t
而不是 void*
。 uintptr_t
是一个整数类型,被定义为大到足以容纳任何指针值。由于它实际上不是指针,因此编译器不会标记任何别名问题。
class MyClass {
public:
typedef uintptr_t identity_t;
identity_t id() const { return (identity_t)this; }
}
关于c++ - 使用 (void*) 作为标识符的一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865652/