Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么cmath不使用模板和/或重载_C++_Templates_Overloading_Tr1_Cmath - Fatal编程技术网

C++ 为什么cmath不使用模板和/或重载

C++ 为什么cmath不使用模板和/或重载,c++,templates,overloading,tr1,cmath,C++,Templates,Overloading,Tr1,Cmath,TR1在C++11中引入的许多新函数都有丑陋的C样签名。例如,引用Boost的TR1文档(): 显然,人们更喜欢一些模板化实现(实际上是Boost中这些函数的“本机”签名),或者至少是一些重载,而不是几个标识符 我可以理解,针对C兼容性意味着支持这些标识符,但这对纯C++的扬声器来说是个讨厌的东西。除了,可能还有一些,具有更自然的界面 我遗漏了什么(除此之外,可能还有一些以前问过的问题)?我不知道Boost,但我知道Boost中的所有标准函数 为三种标准类型提供了重载,因此 例如: double

TR1在C++11中引入的许多新函数都有丑陋的C样签名。例如,引用Boost的TR1文档():

显然,人们更喜欢一些模板化实现(实际上是Boost中这些函数的“本机”签名),或者至少是一些重载,而不是几个标识符

<>我可以理解,针对C兼容性意味着支持这些标识符,但这对纯C++的扬声器来说是个讨厌的东西。除了
,可能还有一些
,具有更自然的界面


我遗漏了什么(除此之外,可能还有一些以前问过的问题)?

我不知道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++标准库维护者之一。我认为 > /Cord> VS <代码> <代码>是一个更有趣的案例研究,因为C++需要三个重载来实现许多功能。
double cos(double);
float cosf(float);
long double cosl(long double);