私のプログラムには、すべて一意の識別子を持つ必要がある (同じクラスの) オブジェクトがあります。簡単さとパフォーマンスのために、オブジェクトのアドレスを識別子として使用することにしました。型を単純にするために(void*)
、この識別子の型として を使用します。最後に、次のようなコードがあります。
class MyClass {
public:
typedef void* identity_t;
identity_t id() const { return (void*)this; }
}
これは問題なく動作しているように見えますが、gcc から厳密なエイリアスの警告が表示されます。IDがデータ転送に使用された場合、コードが悪いことを理解しています。幸いなことにそうではありませんが、疑問が残ります。エイリアシングの最適化は、生成されるコードに影響を与えるのでしょうか? そして、警告を回避する方法は?
注:(char*)
これは、ユーザーがデータをコピーに使用できることを意味するため、使用するのは気が進まないのですが、それはできません!