命名空间std的定义
using namespace std是c++初学者经常遇到的语句(一般不建议粗暴地光棍std哈),非科班但是c++作为工科大一必修(坑爹,c++真正的精髓根本讲不了),当年老师被问到这条语句到底是啥时,也是语焉不详。我们知道c++标准库的所有标识符都定义在namespace std中,翻阅标准库的头文件都找不到熟知的命名空间定义。
命名空间的定义格式为
1 namespace namespace_name { 2 ;// 代码声明 3 }
命名空间的定义可以是分布式定义,即在不同文件中定义某个namespace_a,这些内容都属于其作用域。所以标准库的std应该不是集中定义在某个文件当中,而是分布在各个标准头文件当中。但是好像哪里都找不到标准的命名空间定义语句,原因在于c++帮我们把这些命令转换了形式,在yval_core.h中有预定义
#define _STD_BEGIN namespace std { #define _STD_END } #define _STD ::std:: #define _CHRONO ::std::chrono:: #define _RANGES ::std::ranges::
所以,在头文件看到如下的代码,就是对命名空间std的补充定义
_STD_BEGIN template <class _Ty1, class _Ty2> using _Common_float_type_t = conditional_t<is_same_v<_Ty1, long double> || is_same_v<_Ty2, long double>, long double, conditional_t<is_same_v<_Ty1, float> && is_same_v<_Ty2, float>, float, double>>; // find type for two-argument math function _STD_END

浙公网安备 33010602011771号