首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cstdint与tr1/cstdint的区别

cstdint与tr1/cstdint的区别
EN

Stack Overflow用户
提问于 2010-06-29 09:51:41
回答 3查看 3.1K关注 0票数 3

<cstdint><tr1/cstdint>有什么区别?(除此之外,一个放在名称空间std::中,另一个放在std::tr1::中)

因为这个东西还不是标准的,所以我猜它是特定于编译器的,所以我说的是gcc。要用非tr1编译,我必须用-std=c++0x编译,但在使用tr1时没有这样的限制。

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

谢谢。

附言-如果你像我一样把"std“理解为标准,我为这个Q中这个词的过度使用表示道歉。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-29 10:56:20

至少据我所知,没有在TR1和C++0x之间改变<cstdint>的意图。并不要求#includeing <cstdint>导致错误--官方来说,这只不过是未定义的行为而已。允许实现指定确切的行为,在本例中是这样做的。

票数 3
EN

Stack Overflow用户

发布于 2010-06-29 09:57:20

我想你已经做到了。在我的系统上,它们非常相似,但具有不同的宏观逻辑。例如,/usr/include/c++/4.4/tr1/cstdint具有:

代码语言:javascript
复制
#  define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
#  define _GLIBCXX_END_NAMESPACE_TR1 }
#  define _GLIBCXX_TR1 tr1::

但是/usr/include/c++/4.4/cstdint有:

代码语言:javascript
复制
#  define _GLIBCXX_BEGIN_NAMESPACE_TR1
#  define _GLIBCXX_END_NAMESPACE_TR1
#  define _GLIBCXX_TR1

因此,如果它被包含为<cstdint>,那么TR1名称空间将被简单地定义为oblivion。

票数 3
EN

Stack Overflow用户

发布于 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版本中删除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3137336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档