
216
|
5 章 右辺値参照、ムーブセマンティクス、完全転送
しかし、読者は、著者が先の解説でわざと曖昧にした言葉を駆使したことに気付いているでしょ
う。リンクは「失敗するはず」、参照は「通常」ポインタのように扱われる、static const な汎整
数メンバ変数を参照渡しする場合「一般に」そのメンバ変数を定義しなければならない、まるで読
者に教えたくないことがあるようですね、、、
えぇ、そうなんです。標準仕様によれば、MinVals を参照渡しする場合は定義が必須です。しか
し、すべての処理系にこの制約がある訳ではありません。コンパイラ/リンカによっては、定義し
ていない static const な汎整数メンバ変数でも完全転送可能なことがあります。読者の環境がそ
うならば、おめでとうございます。しかし、そのコードの可搬性は期待できません。可搬性を確保
するには、単純に問題の static const な汎整数メンバ変数を定義するしかありません。MinVals
の場合では、次のようになります。
const std::size_t Widget::MinVals; // in Widget's .cpp file
Widget の.cpp ファイル内
上例の定義には、改めて初期化子を記述していない点に注意してください(この MinVals では
28)。そうは言っても詳細を気にすることはありません。初期化子の記述を 2 箇所共で忘れた、また
は 2 箇所共に記述した場合は、コンパイラがメッセージを表示し