最終更新日時(UTC):
が更新

履歴 編集

sizeof演算子にクラスの非静的メンバを、オブジェクトを作らずに指定できるようにする(C++11)

このページは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)のような回避策がとられていた。

参照