<cstdint>
和<tr1/cstdint>
之间有什么区别? (除了那个将事物放在命名空间std::
中而另一个放在std::tr1::
)
由于这个东西不标准,我想这是编译器特定所以我在谈论gcc。要使用非tr1编译,我必须使用-std=c++0x
进行编译,但使用tr1时没有这样的限制。
答案可能是没有,但你不能到std::
添加东西,除非那里,标准。因此,在标准化c ++ 0x之前,必须使用<cstdint>
发出错误,但在添加到tr1::
命名空间时您不必担心,这不会声称其中的内容是标准的?或者还有更多内容吗?
感谢。
p.s - 如果您像我一样将“标准”作为标准阅读,我为此Q中过度使用该单词而道歉。
答案 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)