在我的程序中,我的对象(同一个类)都必须具有唯一标识符。为了简单和性能,我选择使用对象的地址作为标识符。为了保持类型简单,我将(void*)
其用作此标识符的类型。最后我有这样的代码:
class MyClass {
public:
typedef void* identity_t;
identity_t id() const { return (void*)this; }
}
这似乎工作正常,但 gcc 给了我一个严格的别名警告。我知道如果 id 用于数据传输,代码会很糟糕。幸运的是不是,但问题仍然存在:别名优化会对生成的代码产生影响吗?以及如何避免警告?
注意:我不愿意使用(char*)
,因为这意味着用户可以使用数据进行复制,而不能!