【NULL和NULL】
有没有人被这个标题弄晕了
NULL和NULL还是有区别的
看看lmcons.h的源代码(节选)
[C++] 纯文本查看 复制代码 #ifndef NULL
#ifdef __cplusplus //如果使用的是C++
#define NULL 0 //NULL=0
#else //C语言
#define NULL ((void *)0) //NULL=指针类型0
#endif
#endif
明白了吧,C++的null是整数的0,而C语言数指针0
吐槽:C/C++出个关键字null会死啊,非要用define的形式
【C++为什么和C不相同】
因为C++通过搜索匹配参数的机制,试图找到最佳匹配(best-match)的函数,而如果继续支持void*的隐式类型转换,则会带来语义二义性(syntax ambiguous)的问题。这句话来自CSDN
【举个例子】
[C++] 纯文本查看 复制代码 #include <iostream>
#define HOMO 114514 //闲的
void homo(int homo) {
std::cout << "调用了int类型的homo函数\n";
}
void homo(int* homo) {
//reload homoe
std::cout << "调用了int*类型的homo函数\n";
}
int main(int argc, char* argv[]) {
homo(NULL);
return HOMO;
}
看到了吗?调用了int类型的函数
【使用nullptr】
[C++] 纯文本查看 复制代码 #include <iostream>
#define HOMO 114514 //闲的
void homo(int homo) {
std::cout << "调用了int类型的homo函数\n";
}
void homo(int* homo) {
//reload homoe
std::cout << "调用了int*类型的homo函数\n";
}
int main(int argc, char* argv[]) {
homo(NULL);
homo(nullptr);
return HOMO;
}
学会了吗?
|