<cstdint>和<tr1/cstdint>有什么区别?(除此之外,一个放在名称空间std::中,另一个放在std::tr1::中)
因为这个东西还不是标准的,所以我猜它是特定于编译器的,所以我说的是gcc。要用非tr1编译,我必须用-std=c++0x编译,但在使用tr1时没有这样的限制。
答案可能是没有,但你不能到处向std::添加东西,除非有,嗯,标准的。因此,在c++0x标准化之前,必须使用<cstdint>发出错误,但是在添加到tr1::名称空间时,您不必担心,这并不意味着其中的内容是标准的?或者还有更多的原因呢?
谢谢。
附言-如果你像我一样把"std“理解为标准,我为这个Q中这个词的过度使用表示道歉。
发布于 2010-06-29 10:56:20
至少据我所知,没有在TR1和C++0x之间改变<cstdint>的意图。并不要求#includeing <cstdint>导致错误--官方来说,这只不过是未定义的行为而已。允许实现指定确切的行为,在本例中是这样做的。
发布于 2010-06-29 09:57:20
我想你已经做到了。在我的系统上,它们非常相似,但具有不同的宏观逻辑。例如,/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名称空间将被简单地定义为oblivion。
发布于 2010-06-29 18:09:50
顾名思义,<tr1/cstdint>在TR1中定义,而<cstdint>在c++0x中定义。
从gcc的手册中,需要-std=c++0x来启用可能包含在C++0x中的实验功能。但是,<tr1/cstdint>是在TR1中定义的,而不是在c++0x中定义的,因此不需要-std=c++0x。
以下是-std=c++0x的gcc手册,供您参考。
即将发布的ISO C++0x标准的工作草案。此选项启用可能包含在C++0x中的实验功能。工作草案是不断变化的,如果不是C++0x标准的一部分,由该标志启用的任何功能都可能从未来的GCC版本中删除。
https://stackoverflow.com/questions/3137336
复制相似问题