3

<cstdint>との違いは何<tr1/cstdint>ですか?(それとは別に、1つは名前空間std::に、もう1つはに配置しますstd::tr1::

これはまだ標準ではないので、コンパイラ固有だと思うので、gccについて話します。tr1以外でコンパイルするには、でコンパイルする必要-std=c++0xがありますが、tr1を使用する場合はそのような制限はありません。

std::おそらく答えはありませんが、標準がない限り、物事を追加することはできません。したがって、c ++ 0xが標準化されるまでは、を使用してエラーを発行する必要がありますが、名前空間<cstdint>に追加するときに心配する必要はありません。tr1::それともこれにもっとありますか?

ありがとう。

ps-私がそうするように、あなたが標準として「std」を読むならば、私はこのQの単語の乱用をお詫びします。

4

3 に答える 3

3

私はあなたがそれを持っていると思います。私のシステムでは、それらは非常に似ていますが、マクロロジックが異なります。たとえば、次のようになり/usr/include/c++/4.4/tr1/cstdintます。

#  define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
#  define _GLIBCXX_END_NAMESPACE_TR1 }
#  define _GLIBCXX_TR1 tr1::

しかし/usr/include/c++/4.4/cstdint持っている:

#  define _GLIBCXX_BEGIN_NAMESPACE_TR1
#  define _GLIBCXX_END_NAMESPACE_TR1
#  define _GLIBCXX_TR1

したがって<cstdint>、TR1名前空間として含まれている場合は、単に忘却に定義されます。

于 2010-06-29T01:57:19.873 に答える
3

少なくとも私が知る限り、<cstdint>TR1とC++0xの間で変更する意図はありませんでした。#includeただし、エラーが発生する必要はありません<cstdint>。公式には、未定義の動作にすぎません。実装は正確な動作を指定できますが、この場合は指定できます。

于 2010-06-29T02:56:20.187 に答える
2

<tr1/cstdint>名前が示すように、TR1<cstdint>定義され、c++0xで定義されます。

gccマニュアルから-std=c++0x、C++0xに含まれる可能性のある実験的な機能を有効にするために必要です。ただし、c ++ 0xではなくTR1<tr1/cstdint>で定義されているため、必要ありません。-std=c++0x

以下は参考のためのgccマニュアルです-std=c++0x

今後のISOC++0x標準の作業ドラフト。このオプションは、C++0xに含まれる可能性が高い実験的な機能を有効にします。作業ドラフトは絶えず変更されており、このフラグによって有効になる機能は、C ++ 0x標準の一部でない場合、GCCの将来のバージョンから削除される可能性があります。

于 2010-06-29T10:09:49.813 に答える