最終更新日時:
が更新

履歴 編集

alignof(C++11)

概要

alignof()は、指定した型がメモリ上のどの位置に配置されるか(アライメント)取得する演算子である。「アライン オブ (align of)」と読む。

sizeof()と異なりalignof() は変数には使用できない。

例えば型intが4バイト境界の位置にアライメントされるシステムであれば、alignof(int)は4を返す。

仕様

  • alignof(型)は、指定した型のアライメントのサイズを返す。戻り値の型はstd::size_tである。

もっとも制約の弱い、すなわちアライメントのサイズが最小となる型はchar, signed char, unsigned charであり、 もっとも制約の強い、すなわちアライメントのサイズが最大となる型はstd::max_align_tである。

#include <cstddef>
#include <iostream>

struct hoge {
  char c[63];
  short s;
  double i;
};

struct empty {
};

int main()
{
  std::cout <<
    "std::max_align_t:  " << alignof(std::max_align_t) << std::endl <<
    "char:              " << alignof(char) << std::endl <<
    "int:               " << alignof(int) << std::endl <<
    "double:            " << alignof(double) << std::endl <<
    "struct hoge:       " << alignof(hoge) << std::endl <<
    "struct empty:      " << alignof(empty) << std::endl <<
    "char *:            " << alignof(char *) << std::endl;

  return 0;
}

出力

x86向けLinux上で実行した場合。

std::max_align_t:  8
char:              1
int:               4
double:            8
struct hoge:       4
struct empty:      1
char *:            4

この機能が必要になった背景・経緯

C++03で型のアライメントサイズを得るにはコンパイラの拡張機能を利用するしかなく、コンパイラごとに異なる記述を行う必要があったが、C++11ではどのコンパイラでも同じ記述でアライメントサイズが取得できる。

検討されたほかの選択肢

N2341 からはわからない、恐らくないと思われる。

関連項目

参照