C++ 为什么cmath不使用模板和/或重载
TR1在C++11中引入的许多新函数都有丑陋的C样签名。例如,引用Boost的TR1文档(): 显然,人们更喜欢一些模板化实现(实际上是Boost中这些函数的“本机”签名),或者至少是一些重载,而不是几个标识符 <>我可以理解,针对C兼容性意味着支持这些标识符,但这对纯C++的扬声器来说是个讨厌的东西。除了C++ 为什么cmath不使用模板和/或重载,c++,templates,overloading,tr1,cmath,C++,Templates,Overloading,Tr1,Cmath,TR1在C++11中引入的许多新函数都有丑陋的C样签名。例如,引用Boost的TR1文档(): 显然,人们更喜欢一些模板化实现(实际上是Boost中这些函数的“本机”签名),或者至少是一些重载,而不是几个标识符 我可以理解,针对C兼容性意味着支持这些标识符,但这对纯C++的扬声器来说是个讨厌的东西。除了,可能还有一些,具有更自然的界面 我遗漏了什么(除此之外,可能还有一些以前问过的问题)?我不知道Boost,但我知道Boost中的所有标准函数 为三种标准类型提供了重载,因此 例如: double
,可能还有一些
,具有更自然的界面
我遗漏了什么(除此之外,可能还有一些以前问过的问题)?我不知道Boost,但我知道Boost中的所有标准函数
为三种标准类型提供了重载,因此
例如:
double cos(double);
float cos(float);
long double cos(long double);
代替C:
double cos(double);
float cosf(float);
long double cosl(long double);
我不太清楚你为什么想要函数模板而不是
超载。对于大多数数学函数,没有泛型
实施是可能的;正确的实施将取决于
精度、舍入规则等各不相同
类型。因此,另一种选择是不带模板的模板函数
一个通用实现和三个专门化。还有什么
这是否为“更简单”的重载函数买单?这些函数的用户群已经很小了,我想没有人认为需要模板实现是值得的(非模板也更容易以快速内联汇编的形式维护)@Xeo谢谢,我完全错过了第3、4和5段[5.2.1]:他们确实要求基于
double
签名(具有适当名称的签名)为float
和long double
添加重载也可以从红帽博客中看到Jonathan Wakely的观点。Wakely是GCC的C++标准库维护者之一。我认为double cos(double);
float cosf(float);
long double cosl(long double);