3

<cstdint>和 和有什么不一样<tr1/cstdint>?(除了一个把东西放在命名空间std::和另一个放在std::tr1::

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

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

谢谢。

ps - 如果您像我一样将“std”作为标准阅读,我为这个 Q 中过度使用这个词表示歉意。

4

3 回答 3

3

至少据我所知,<cstdint>TR1 和 C++0x 之间没有改变的意图。#include不过, ing不需要<cstdint>导致错误——正式地说,它只不过是未定义的行为。允许实现指定确切的行为,在这种情况下它确实如此。

于 2010-06-29T02:56:20.187 回答
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 回答
2

<tr1/cstdint>顾名思义,在TR1中定义,而<cstdint>c++0x中定义。

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

以下是 gcc 手册-std=c++0x供您参考。

即将发布的 ISO C++0x 标准的工作草案。此选项启用可能包含在 C++0x 中的实验性功能。工作草案不断变化,如果此标志启用的任何功能不属于 C++0x 标准的一部分,则可能会从 GCC 的未来版本中删除。

于 2010-06-29T10:09:49.813 回答