5

私は SO が初めてで、これが私の最初の質問ですが、ルールを読みました。ルールを破らないことを願っています。

私は最近プログラミングを学び始め、最初の言語として C++ を選びました。今日、私は適切な決定を下すために助けが必要なところまで来ました。私は C++ Primer Plus の第 6 版から学習していますが、これまでのところ著者は C マクロを紹介しただけで、 numeric_limitsテンプレート (少なくとも私はそれがテンプレートだと思います) について一言も言っていません。私の好奇心。

したがって、今は少し迷っています。正しく理解していれば、numeric_limitsは簡単に拡張できるため、C++ 型の制限をチェックするための最新の方法だからです。さらに、C マクロの中には、char16_t のような C++11 型の定義がありません。

私が見つけたのはその質問だけですが、役立つ回答を提供してくれましたが、残念ながら、私にとって特に興味深いものには回答していません。また、彼らは実際にはかなり古いものです。

さて、具体的な質問:

将来のコード実行速度、安全性、および有用性のニーズに基づいて (シンプルさはあまり気にしません)、これらの古い C マクロを使用する方が良い考えですか?

私の英語の間違いを許してください。それは私の母国語ではありません。

4

2 に答える 2

7

ほとんどのコードでは、C のマクロまたは C++ のいずれかがstd::numeric_limits正常に機能します。C++03 では、メンバーmin()max()メンバーが定数式を生成できないという問題がありましたが、この問題は C++11 の で解決されていconstexprます。

どちらのアプローチも完全にタイプ セーフであり、型プロパティの取得方法のみが異なるプログラムの 2 つのバージョンの違いを測定できるとしたら、私は驚きます。マクロが代わりにならない主な領域はテンプレートです。テンプレート エンティティには固定名が必要ですが、マクロはそのようには機能しません (コンパイル中に間違ったタイミングで展開されることもあります)。

個人的にはstd::numeric_limits<T>、主にすべてのコードで使用でき、名前をよりよく覚えられるため、常に を使用しています。

于 2013-12-17T17:35:58.047 に答える
1

DBL_MAX と std::numeric_limits::max() の両方が完全に問題ありませんが (後者が長くて煩わしいことに加えて)、typedef を持つ値表現を変更する場合は、前者を使用しない場合があります。

struct X {
   typedef double Real; // may become float
};

また、std::numeric_limits を使用する必要があるテンプレートがあります。

于 2013-12-17T17:30:50.293 に答える