標準の観点から、C++<limits>
ヘッダーから以下を使用する必要がありますか?
UCHAR_MAX
どちらが c 実装か、
std::numeric_limits<unsigned char>::max()
どちらが C++ 実装か。
結果は2つのバージョン間で同等ですが、この場合、何らかの標準に基づいて、または読みやすさと移植性に基づいて実装を選択する必要があります. この実装はクロスプラットフォーム互換である必要があることに注意してください。私はC++コードを書いています。
コードを C としてコンパイルできるようにする場合は、<limits.h>
. C++ を作成している場合は、代わりに C++<limits>
ヘッダーを使用することをお勧めします。後者を使用すると、実際には C ヘッダーで複製できないテンプレートで機能するコードを記述できます。
template <class T>
class mytemplate {
T x;
void somefunc() { x = std::numeric_limits<T>::max(); } // or whatever...
};
一貫性を保つために <limits> を使用する必要があります。
Windows プラットフォームで <windows.h> をインクルードする場合は、
#define NOMINMAX
min および max との名前の競合を避けるため。
Cを使用している場合、std::numeric_limits
明らかに利用できません。
C++ では、何をしたいかによって異なりますstd::numeric_limits<T>::max()
。現在の C++ 標準の定数式ではありません。これらの場合、C っぽいマクロに代わるものは、テンプレート化されたコンテキストでも機能する
Boost.Integers integer traits const_min
/のようなものを使用することです。const_max
自分が何語で書いているかを知り、その言語で書きましょう。C++ を作成している場合は、標準的な C++ の方法を使用してください。
標準 C++ は通常、クロスプラットフォーム互換です ( のような例外がありますがexport
、export
C++ 標準から削除されています)。通常、C と C++ の構造を切り替えるよりも、C++ の構造に固執する方が読みやすいです。