このページはC++11に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
クラスの非静的メンバ変数のサイズを取得したい場合、そのクラスのオブジェクトを生成してからsizeof
演算子にメンバを指定する必要があった。その制限が外され、クラスと非静的メンバ変数を、スコープ解決演算子 ::
区切りでsizeof
演算子に指定できるようになった:
#include <iostream>
struct X {
int m;
};
int main()
{
const std::size_t size = sizeof(X::m);
std::cout << size << std::endl;
}
これができなかったバージョンでは、sizeof(((X*)0)->m)
のような回避策がとられていた。