查看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++;
?可能含糊不清? (虽然我认为后者可以通过简单的演员解决)。
答案 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 ++模式下调用不同的函数。