C++ Weekly - Ep 416 - Moving From C++11 to C++14

C++ Weekly With Jason Turner
19 Feb 202416:04

Summary

TLDRC++のコードをC++98からC++14へ移行する方法について。main関数などをtrailng return型に、constexprを追加し、テストフレームワークをCatch2へ移行している。

Takeaways

  • 😀 Jason is upgrading a math expression evaluator project from C++98 to more modern standards
  • 🔨C++14 provides some bug fixes and improvements over C++11 like auto return type deduction
  • 📚 Catch2 unit testing framework requires at least C++14 so upgrading enables using this
  • 👀 C++ attributes added in C++11 may be useful later like [[nodiscard]] in C++17
  • ✏️ Trailing return types can be used for consistency and are enabled in C++14
  • 🧱 Helper functions like isNumber can be made free functions instead of static for reuse
  • 🤖 Tools like ClangTidy can automatically modernize some code but not all transformations
  • ⚙️ Return value optimization in C++14 fixes some unnecessary warnings about constness
  • 📈 Code size decreasing slightly with each language upgrade due to improvements
  • 🎉 Main goals of upgrade to C++14 completed, C++17 upgrade coming next

Q & A

  • C++11からC++14への移行で、どのような変更が行われましたか?

    -C++11からC++14への移行では、auto戻り値型の推論やconstexprの清書などが行われました。これらの変更は比較的直接的であり、C++14をC++11のバグ修正版と呼ぶことがあります。

  • ClangTidyのModernize機能を使用する利点は何ですか?

    -ClangTidyのModernize機能を使用する利点は、コードを自動的に最新の標準に合わせて変換できることです。これにより、手動での変更に比べて時間と労力が節約されます。

  • Catch2テストフレームワークを使用することの利点は何ですか?

    -Catch2テストフレームワークを使用する利点は、C++14またはそれ以降の標準をサポートし、ユニットテストの作成と実行を簡単にする豊富な機能を提供することです。

  • C++14ではどのような属性が重要ですか?

    -C++14では、[[deprecated]]属性が追加されましたが、C++17で導入された[[nodiscard]]や[[maybe_unused]]などのより興味深い属性にはまだ到達していません。

  • constexprに関するC++14の改善点は何ですか?

    -C++14ではconstexprの使用が拡張され、より多くの関数や変数でconstexprを使用できるようになりましたが、すべての可能性をカバーしているわけではありません。

  • C++14への移行でClangTidyをどのように活用しましたか?

    -C++14への移行で、ClangTidyを活用してコードの自動リファクタリングを行い、特にtrailing return typeのルールを有効にすることでコードの一貫性を高めました。

  • C++14でemplace_backの挙動にどのような変更がありましたか?

    -C++14ではemplace_backが追加したオブジェクトへの参照を自動的に返すようになり、コードを少し簡略化することが可能になりました。

  • C++14への移行におけるユニットテストの重要性は何ですか?

    -C++14への移行において、ユニットテストはコードが期待通りに機能することを保証し、リファクタリングや標準の更新が既存の機能に悪影響を与えていないことを確認するために重要です。

  • constexpr関数のテストで遭遇した面白い現象とは何ですか?

    -constexpr関数のテストでは、コンパイル時に関数が期待通りに動作するかどうかを即座に確認できるため、非常に迅速なフィードバックが得られる現象がありました。

  • C++14への移行で特に注目すべきライブラリの変更はありましたか?

    -C++14への移行において、特にCatch2テストフレームワークの採用が注目されます。Catch2はC++14以降の標準を要求するため、この移行が可能になったことは、ユニットテストの構成と実行において大きな進歩を意味します。

Outlines

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Mindmap

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Keywords

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Highlights

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Transcripts

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード