何年も前、私は C は C++ に比べて完全に純粋であると信じていました。なぜなら、コンパイラは予測できないコードを生成することができなかったからです。私は今、反例にはvolatile
キーワードとメモリバリアが含まれていると信じています (マルチプロセッサプログラミングまたはメモリマップされたハードウェアデバイスのデバイスドライバで、プレーンなアセンブリ言語は C コンパイラの最適化よりもさらに純粋です)。
現時点では、C++ コンパイラが実行できる予測不可能なことを列挙しようとしています。C++ について私の心に残る主な不満は、コンパイラが暗黙的に一時オブジェクトをインスタンス化するということですが、これらのケースはすべて予想できると思います。私が考えているケースは次のとおりです。
explicit
キーワードを使用せずに、クラスがそれ自体以外の型のコピー コンストラクターを定義する場合- クラスがオーバーロードされた変換演算子を定義する場合:
operator ()
- 関数が参照ではなく値でオブジェクトを受け入れる場合
- 関数が参照ではなく値でオブジェクトを返す場合
他にもありますか?