C++11 long long超长整型与nullptr空指针详解
本文介绍 C++11 标准中新添加的 long long 超长整型和 nullptr 初始化空指针。针对C++11标准的两大核心更新,详细解析了int类型的扩展与指针安全初始化的具体实现方式。
结果或目标
C++11 标准为了解决早期整数类型表示范围受限以及 NULL 宏在函数重载时容易引发的歧义问题,引入了 long long 超长整型和 nullptr 关键字。正确掌握这两个特性,能够确保程序在不同平台上具有更大的数据容纳空间,并在指针管理上杜绝“野指针”与类型转换错误。
准备条件
- 确认编译器支持 C++11 标准(如 Visual Studio 2010+ 或 GCC 4.6.1+)。
- 理解基本的整数数据类型与指针概念。
真实操作顺序
第1步:使用 long long 处理超大数值
C++11 标准要求每种整数类型必须同时具备有符号和无符号两种形式,并限定了各类型的最小占用位数。其中,long long 是 C++11 新加入的类型,用于满足 64 位数据存储需求。
- 类型说明:
long long至少有 64 位(8字节),unsigned long long提供同宽度的无符号支持。 - 字面量后缀:直接书写的长整型常量默认可能被视为
int,必须添加后缀才能被识别为long long类型:
- 有符号超长整型:使用
LL或ll后缀(例如:10LL)。 - 无符号超长整型:使用
ULL、ull、Ull或uLL后缀(例如:10ULL)。
若想获取当前平台上的取值边界,可引用 <climits> 头文件中的宏定义:
LLONG_MIN/LLONG_MAX:获取最小/大值。ULLONG_MIN:通常值为 0,ULLONG_MAX获取最大无符号值。
#include <iostream>
#include <climits>
using namespace std;
int main() {
cout << "long long最大值:" << LLONG_MAX << endl;
cout << "unsigned long long最大值:" << ULLONG_MAX << endl;
return 0;
}
第2步:通过 nullptr 安全初始化空指针
在 C++98/03 时代,程序员通常使用 NULL 或 0 来初始化指针以避免成为“野指针”。然而,NULL 本质上是宏定义的字面常量 0。这导致在面对函数重载时,NULL 会被隐式转换为整形参数,从而调用错误的函数版本,引发逻辑异常。
// C++98 时代的隐患:isnull(NULL) 调用的是 int n 的重载版本
void isnull(void *c){ cout << "void*c" << endl; }
void isnull(int n){ cout << "int n" << endl; }
// 解决方案需要强制类型转换:
isnull((void*)NULL);
C++11 引入了 nullptr 专用于解决此问题:
- 唯一匹配性:
nullptr属于全新的nullptr_t类型,它可以被隐式转换为任意指针类型,但绝不会被转换为整形。 - 跨平台兼容**:只要编译器支持 C++11,即可直接使用
nullptr初始化任何类型的指针。
// 正确的 C++11 用法
int * p = nullptr;
double * ptr = nullptr;
// 此时 isnull(nullptr) 将准确调用 void* 版本
isnull(nullptr);
完成判断
- 使用后缀
LL/ULL声明的变量能通过编译并正确存储超出int范围的大数值。 - 所有指针初始化均采用
nullptr,消除了旧标准中因零值转换导致的函数重载歧义。
简要总结
以上就是 C++11 中 long long 超长整型和 nullptr 初始化空指针的详细内容,更多关于 C++11 高级特性优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













