gpt4 book ai didi

c++ - 将 std::tr1 导入 std - 合法吗?它是否提高了便携性?

转载 作者:IT老高 更新时间:2023-10-28 22:34:37 25 4
gpt4 key购买 nike

我的 C++03 代码如下所示:

#include <boost/tr1/unordered_map.hpp>
...
std::tr1::unordered_map<std::string, int> mystuff;
...

我开始怀疑如果/当我将代码转换为 C++11(我猜)没有 std::tr1::unordered_map 但有std::unordered_map 代替。所以我想出了以下技巧:

namespace std
{
using namespace ::std::tr1;
}
...
std::unordered_map<std::string, int> mystuff; // no tr1 now!
...

是否合法(也许禁止将内容导入到 std 中)?它会让移植/与 C++11 代码互操作变得更容易吗?

最佳答案

您不应该接触 std 命名空间:即使它现在可以工作,但以后可能会引起严重的头痛(使用新版本的编译器,在不同的编译器上等等)。

更新:引用标准(C++ 2003,第 17.4.3.1 节“保留名称”)(找到 here):

It is undefined for a C++ program to add declarations or definitions to namespace std or namespaces within namespace std unless otherwise specified. A program may add template specializations for any standard library template to namespace std. Such a specialization (complete or partial) of a standard library template results in undefined behavior unless the declaration depends on a user-defined type of external linkage and unless the specialization meets the standard library requirements for the original template. [emphasis mine]

关于c++ - 将 std::tr1 导入 std - 合法吗?它是否提高了便携性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com