web-dev-qa-db-ja.com

効果的なC ++はまだ効果的ですか?

この投稿 で見たものから、この本を読み始めることにしました Effective C++

しかし、C++ 11のおかげで多くの新機能があり、いくつかの良い習慣が変わった今、それが実際に良いアイデアであるかどうかはわかりません。 C++ 11の出現により、Effective C++に含まれるアドバイスは廃止されましたか?もしそうなら、どのトピックを避けるべきですか?

134
German Capuano

これは、スコット・マイヤーズ自身がそれについて言わなければならなかったこと 彼自身のブログで

これにより、このC++ 0xより前のバージョンのEffective C++の情報とアドバイスが引き続き適切かどうか疑問に思うかもしれません。それができたことを報告できてうれしいです。驚くべきことに、実際には。 2年近くC++ 0xの詳細に没頭していたので、この本の目次をC++ 0xを念頭に置いて少しうめくと思っていました。確かにいくつかのアイテムは不適切でしょう。しかし、私が見つけたアドバイスは確かなものでした。 C++ 0x開発者は、#defines(項目2)よりもconst、enum、およびinlineを好むべきですか?彼らはすべき。例外がデストラクタを離れないようにする必要がありますか(項目8)。もちろん。オブジェクトを使用してリソースを管理する必要がありますか?データメンバーをプライベートとして宣言しますか?仮想機能の代替案を検討しますか?テンプレートからパラメーターに依存しないコードを抽出しますか? (項目13、22、35、および44。)はい、はい、はい、はい!私の目標は、Effective C++の目次が本のアドバイスを要約することであり、その要約は、「従来の」C++開発と同様にC++ 0x開発にも同様に当てはまります。 C++ 0xはより大きな言語であり、ある意味では異なる言語ですが、「古い」C++を効果的に使用するためのコア技術は、C++ 0xを効果的に使用するためのコアでもあります。

これは、この効果的なC++がC++ 0xに完全に一致するという意味ではありません。この本では、C++ 0xの新しい機能については説明していないため、これらの機能を効果的に使用するための項目はありません。 C++ 0xifiedの有効なC++には、操作の移動、統一された初期化、およびラムダ式に専念するアイテムが確実にあり、おそらく同時実行APIの効果的な使用に関する章全体があります。そのような本には、たとえば、自動変数、範囲ベースのforループ、クラス内のデフォルト初期化子、および時折の可変テンプレートを使用する例など、さまざまな例も含まれます。この本がC++ 0xのサポートに達していない限り、エラーはコミッションではなく省略のエラーです。

UPDATE:新しいタイトルEffective Modern C++が販売されました2014年11月以降 O'Reilly および Amazon (およびグーグルで検索できる他の多く)。

88
TemplateRex

はい、間違いなくまだ読む価値があります。 Scottが取り組んでいる新しい本:Effective C++ 11 があり、C++ 11のみに集中していますコード。 Effective C++は依然として非常に関連性があり、新しい本に取って代わられません。それを買って、読んで、楽しんでください:)

44
cdmh

1つ目は、この本はもちろんC++ 03でも有効です。

2つ目は、この文をいつ読んでいるかに応じて、マイヤーズが書いているか書いているか、Effective C++ 11です。

三、一般的に言えば、この本のポイントはまだ有効です。 C++は安全性よりも速度を優先し、Effective C++の多くの問題がこれを中心に展開します。

のみ無効になると思われる種類のポイントは、「これをしないで、代わりにこれを行う」ということです。 「これをしない」は引き続き有効です。しかし、C++はいくつかの問題を解決したでしょう。特に、C++ 11にはMeyersが読者にBoostを特に言及している機能の多くが含まれているため、boostの使用に関する推奨事項は推奨されません。

20
djechlin