C++11 long long超长整型与nullptr空指针详解

清欢
清欢
发布时间:2026-10-15 | 5人浏览过
原创

本文介绍 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 类型:
  1. 有符号超长整型:使用 LL 或 ll 后缀(例如:10LL)。
  2. 无符号超长整型:使用 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 高级特性优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表