为什么有`std :: llabs`?

时间:2016-10-06 02:08:40

标签: c++ c++11

查看std::abs形式的long long abs( long long n ); 重载,我意识到有两个不同的函数完全相同,都是在C ++ 11中引入的:

long long llabs( long long n );

std::llabs

有没有理由引入int x = 1; int y = 2; int z = x++ + y++; ?可能含糊不清? (虽然我认为后者可以通过简单的演员解决)。

1 个答案:

答案 0 :(得分:5)

它适用于C源兼容性。 C没有函数重载(使用来自C11的$ awk -v FS=, -v OFS=, 'NR>1{ for(i=1; i<=NF; i++){ sub(/^No Data$/,"NA",$i); sub(/^Off$/,"0",$i); sub(/^On$/,"1",$i) } } 1' ip.txt Start,Card,App,Description,Internet 2013-01-02 11:54:00,NA,0,Our system has No Data,0 2013-01-03 05:30:00,Visa,1,The monitoring system is Off,0 2013-01-05 17:07:00,Master,0,The system is On,1 2013-01-07 00:08:00,NA,NA,NA,1 2013-01-09 04:40:00,Master,0,System is Off,1 没有一些魔术宏)。

因此,如果您希望代码在C和C ++模式下编译,即作为某种类型的库,您可以执行以下操作,并在C ++和C模式下成功编译代码。

_Generic

如果您要在上述代码段中调用// foo.c #include <stdlib.h> #ifdef __cplusplus extern "C" #endif long long foo(long long val) { return llabs(some_value); } ,则会在C和C ++模式下调用不同的函数。