nullptr

在XLC编译器,stddef.h头文件将NULL定义为0,与字面值0相同,导致会调用f(int)这个版本 ```

include

void f(char* c) { printf("invoke f(char* c)\n"); }

void f(int i) { printf("invoke f(int i)\n"); }

int main() { f(0); f(NULL); // 如果用gcc编译,NULL转化为内部标识__null,该语句编译失败 f((char*)0); return 0; } ```

typedef decltype(nullptr) nullptr_t;

int main() { f(nullptr); f(0); return 0; }

int main() { // nullptr可以隐式转换为char* char* cp = nullptr; // 不可转换为整型,而任何类型也不能转换为nullptr_t // 以下代码不能通过编译 int n1 = nullptr; int n2 = reinterpret_cast<int>nullptr; // nullptr与nullptr_t类型变量可以作比较, // 当使用== <= >=符号比较时返回true nullptr_t nptr; if (nptr == nullptr) { cout << "nptr == nullptr" << endl; } else { cout << "nptr != nullptr" << endl; } if (nptr < nullptr) { cout << "nptr < nullptr" << endl; } else { cout << "nptr !< nullptr" << endl; } // 不能转换为整型或bool类型,以下代码不能通过编译 // if (0 == nullptr) // if (nullptr) // 不可以进行算术运算,以下代码不能通过编译 // nullptr += 1; // nullptr * 5; // 以下操作均可以正常进行 sizeof(nullptr); typeid(nullptr); throw(nullptr); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值