C++/仕様に関すること

以下は全て私のための覚書です.

NULLポインタの定義

0はNULLではない. NULLと書く.
C: ((void*)0)
C++98: (0)
C++11+: nullptr

__cplusplus

msvcは, 199711L
//C++98
__cplusplus = 199711L
//C++11
__cplusplus = 201103L

メンバイニシャライザの初期化順序

宣言順で初期化される. 下記では`a0_`, `a1_`の順.
故に, メンバイニシャライザと宣言の順序は一致させる.
class Hoge
{
public:
    Hoge()
        :a1_(1)
        ,a0_(0)
    {}
private:
    int a0_;
    int a1_;
};

Trivially Copyable

memcpyでコピーできる型のことを, Trivially Copyableな型をいいます.
trivialであるとは, ユーザ定義でなくdeleteされていないということ,
Trivially Copyableの条件は以下だそうです.
  • trivialでない, コピーコンストラクタ, ムーブコンストラクタ, コピー代入演算子, ムーブ代入演算子を持たないこと.
  • trivialなデストラクタを持っていること.
std::is_trivially_copyableでチェックできます.
static_assert(std::is_trivially_copyable<T>::value == true, "T must be trivially copyable.");
cpprefjp is_trivially_copyable

ベクトルや行列の配列などは, memcpyですませたいことが多いのでTrivially Copyableにしておきます.

0 件のコメント:

コメントを投稿