cstdint和tr1 / cstdint之间的区别

时间:2010-06-29 01:51:41

标签: c++ c++11 tr1

<cstdint><tr1/cstdint>之间有什么区别? (除了那个将事物放在命名空间std::中而另一个放在std::tr1::

由于这个东西不标准,我想这是编译器特定所以我在谈论gcc。要使用非tr1编译,我必须使用-std=c++0x进行编译,但使用tr1时没有这样的限制。

答案可能是没有,但你不能到std::添加东西,除非那里,标准。因此,在标准化c ++ 0x之前,必须使用<cstdint>发出错误,但在添加到tr1::命名空间时您不必担心,这不会声称其中的内容是标准的?或者还有更多内容吗?

感谢。

p.s - 如果您像我一样将“标准”作为标准阅读,我为此Q中过度使用该单词而道歉。

3 个答案:

答案 0 :(得分: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命名空间被简单地定义为遗忘。

答案 1 :(得分:3)

至少据我所知,没有意图在TR1和C ++ 0x之间更改<cstdint>。虽然#include <cstdint>没有要求导致错误 - 正式来说,它不会比未定义的行为更多或更少。允许实现指定确切的行为,在这种情况下确实如此。

答案 2 :(得分:2)

顾名思义,TR1定义了{p> <tr1/cstdint>,而c++0x定义了<cstdint>

从gcc手册中,需要-std=c++0x来启用可能包含在C ++ 0x中的实验性功能。但是,<tr1/cstdint>定义了-std=c++0x,而不是TR1,因此不需要-std=c++0x

以下是{{1}}的gcc手册供您参考。

  

即将推出的ISO C ++ 0x标准的工作草案。这个      选项可以启用可能的实验性功能      包含在C ++ 0x中。工作草案不断变化,      并且可以删除此标志启用的任何功能      从GCC的未来版本,如果它不是C ++ 0x的一部分      标准。