参照には保存場所がありますか、それとも単なる別の場所のエイリアスですか?これはC++のリビジョンによって異なりますか、それともC++のすべてのバージョンで一貫していますか?そして、参照に格納場所がある場合、型のようなポインタで値のセマンティクスを許可するだけですか?
そのように使用すると、参照はどのように機能しますか?
struct aStruct{
int aVariable;
aClass& aReferencetoaClass;
};
それはスペースをとりますか、それともエイリアスですか?
最新のC++ 20仕様 (§9.2.3.3)および少なくとも C++ 2005ドラフト仕様 以降の状態:
参照にストレージが必要かどうかは指定されていません
実際の実装はケースバイケースです。明らかに、クラスに、どこかに格納する必要がある参照である単一のメンバー変数がある場合。しかし、コンパイラーは、参照をエイリアスとしてのみ使用する場合に余裕があります。
ほとんどのコンパイラは、少なくともC++ 17までのC++標準の場合、最適化されない限り、参照をポインタとして効果的に実装します。
特に、struct
の内部では、ポインターのサイズ(および配置/パディングなど)を占有します。
したがって、これはほとんどの環境で保持されます。
struct S {
char & a;
};
static_assert(sizeof(S) == sizeof(void *));