为什么type_traits是类而不是函数
Why type_traits are classes & not functions
我最近一直在研究type_traits
;想知道为什么它们被实现为CCD_ 2,而将它们实现为CCD_;具有更简单的语法。
我想说的是这个语法:-
int x = 5;
std::cout << is_same<int>(x);
更有说服力&比实际的更干净
int x = 5;
std::cout << is_same <int, decltype(x)>::value;
这只是出于好奇。我只是想知道标准化委员会喜欢class
方法而不是function
方法的理念。
-
时尚。大多数类型特征都有
X::value
布尔常量和X::type
类型别名,可用于标记调度 - 部分专业化的能力。函数不能有部分专门化,只能有完全专门化和重载。在存在专门化和重载的情况下,很容易调用错误的函数
-
编译时评估。大多数类型性状是在前千年发明的,当时
constexpr
功能不可用。即使在constexpr函数中,也不能将值作为参数传递,因为这可能会阻止编译时求值 - 你总是有类型,但有时这就是你的全部。创建一个不总是有效的函数会适得其反,所以我们无论如何都不能依赖模板参数推导
相关文章:
- C++:调用没有匹配函数:为什么需要一个空的构造函数?
- 我是C++新手,我想知道,为什么在c ++中使用纯虚函数?为什么要使用纯虚函数?
- 无法重新声明构造函数.为什么?
- 通过指针调用模板类成员函数 [为什么这是有效的 c++]?
- 将指针传递给函数 - 为什么我无法打印地址?
- 我打算调用initializer_list构造函数,如果存在,则事先调用复制构造函数:为什么?
- C ++中的函数为什么我的编译器无法识别错误()
- 成员函数与友元函数:为什么是一个而不是另一个?
- 可怕的元函数:为什么它们更快?
- 调用自动构造函数:为什么我的类型不完整
- cpp 没有匹配的函数调用来调用构造函数.为什么
- POW函数为什么返回意外值
- 模板中的友元函数(为什么这在Visual Studio中失败,而不是GCC和Clang)
- 显式函数为什么
- C++构造函数初始化列表调用默认构造函数.为什么
- 未调用构造函数?为什么
- C++:自动向量重新分配调用复制构造函数?为什么
- C++ / 多态性 / 虚函数 / 为什么我的子类的函数没有被调用?
- Linux vs Windows std::map 赋值构造函数(为什么会有这样的区别?)
- 错误:使用已删除的函数.为什么?