查看: 190|回复: 1

[一本通] 【C++】C++11新关键字:nullptr

[复制链接]

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
5908
人气
156
分享
52

最佳新人活跃会员

发表于 2023-3-3 13:01:09 | 显示全部楼层 |阅读模式
【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;
}



学会了吗?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你干嘛~哎哟

0

技术

0

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
906
人气
3
分享
0
发表于 2023-3-11 17:26:16 | 显示全部楼层
怎么那里都有homo
个人主页:https://blog.zgrhlsmyms.repl.co
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表