私はリップマンのc ++入門書を読んでいます。303彼らはこれを与える:
class Account {
private:
static constexpr int period = 30;
double daily_tbl[period];
}
コンパイラがメンバーの値を置き換えることができるコンテキストでのみメンバーが使用される場合、初期化された const または constexpr static を個別に定義する必要はありません。ただし、値を代入できないコンテキストでメンバーを使用する場合は、そのメンバーの定義が必要です。
また:
たとえば、Account::period を const int& を取る関数に渡す場合、period を定義する必要があります。
だから私はそのような機能を追加しようとしました:
class Account {
private:
static constexpr int period = 30;
double daily_tbl[period];
void foo(const int &i) { ; }
void bar() { foo(period); } //no error?
};
そこで、const int& を取る関数を追加しました。また、期間変数の定義も追加しませんでした。しかし、それでもエラーは発生しません。なぜだめですか?