为什么 std::move 定义在 <type_traits> 而不是 <utility>?
Why is std::move defined in <type_traits> but not in <utility>?
cppreference.com and the cplusplus.com 说它是在 <utility>
中定义的。但是我的 IDE 将我发送到 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits"。
不明白为什么。
标准仅指定 #include <utility>
允许您访问 std::move
。它不需要该定义实际存在于该头文件中。标准库可以根据实施者认为合适的方式在内部自由组织。例如,<utility>
可能只包含 #include <utility_internal>
(然后包含实际的库实现)——标准中没有任何内容禁止这样做。
在 Microsoft 的标准库实现中,<utility>
有一个 #include <type_traits>
。 因此,如果你这样做 #include <utility>
,你将得到std::move
。这就是你应该关心的。
cppreference.com and the cplusplus.com 说它是在 <utility>
中定义的。但是我的 IDE 将我发送到 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits"。
不明白为什么。
标准仅指定 #include <utility>
允许您访问 std::move
。它不需要该定义实际存在于该头文件中。标准库可以根据实施者认为合适的方式在内部自由组织。例如,<utility>
可能只包含 #include <utility_internal>
(然后包含实际的库实现)——标准中没有任何内容禁止这样做。
在 Microsoft 的标准库实现中,<utility>
有一个 #include <type_traits>
。 因此,如果你这样做 #include <utility>
,你将得到std::move
。这就是你应该关心的。