27. ◆実は副作⽤を禁止できない
• これもそのまま constexpr 関数に出来る
template<class T>
constexpr T& f( T&& t ) { return t = 42; }
constexpr int k = f(0);
もちろんコンパイル時に評価しよう
とするとエラーになるが……
int i = 0;
int j = f( i );
実⾏時評価だと何も問題なく
コンパイル・実⾏できる
93. ◆イテレータインタフェース
• 通常副作⽤を持たない
– デリファレンス: *a
– 添字デリファレンス: a[n]
– 加算/減算: a + n, a - n, a - b
– 等価⽐較: a == b, a != b
– 不等価⽐較: a < b, a > b, a <= b, a >= b
• 通常副作⽤を持つ
– インクリメント/デクリメント: ++a, --a, a++, a--
– 加算代入/減算代入: a += n, a -= n
124. ◆制御構文の使⽤
• 制御構文の使⽤
• if, switch, while, do-while, for, range-based for
template<class Range, class T>
constexpr T accumulate( Range const& rng, T init ) {
for ( auto const& e : rng ) {
init += e;
}
return init;
}