news 2026/6/11 19:56:04

C++ 入门必看:引用怎么用?inline 和 nullptr 是什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 入门必看:引用怎么用?inline 和 nullptr 是什么

在 C++ 入门中,引用、inlinenullptr是三个基础且重要的概念,下面分别解释它们的用法和意义:

一、引用(Reference):给变量起“别名”

引用是已存在变量的别名,它与原变量共享同一块内存空间,修改引用会直接影响原变量。

用法:
  1. 定义引用:用&符号声明,必须在定义时初始化,且不能再指向其他变量。int a = 10; int& ref = a; // ref 是 a 的引用(别名) ref = 20; // 修改 ref 等同于修改 a,此时 a = 20
  2. 作为函数参数:避免值传递的拷贝开销,直接操作原变量(常用作输出参数)。void swap(int& x, int& y) { // 引用传递 int temp = x; x = y; y = temp; } int main() { int a = 1, b = 2; swap(a, b); // 直接交换 a 和 b 的值,无需指针 return 0; }
  3. 作为函数返回值:可以返回变量的引用(需确保变量生命周期足够长),支持链式操作。int& getElement(int arr[], int index) { return arr[index]; // 返回数组元素的引用 } int main() { int arr[3] = {1, 2, 3}; getElement(arr, 1) = 100; // 直接修改数组元素,arr 变为 {1, 100, 3} return 0; }
注意:
  • 引用必须初始化,且不能指向空(区别于指针)。
  • 不存在“引用的引用”或“引用的指针”,但可以有“指针的引用”。
二、inline:内联函数,减少函数调用开销

inline是用于修饰函数的关键字,建议编译器在调用该函数时,直接将函数体代码“插入”到调用处,而非执行常规的函数调用(压栈、跳转等操作),从而提高程序运行效率。

用法:

代码语言:cpp

AI代码解释

inline int add(int a, int b) { // 声明为内联函数 return a + b; } int main() { int sum = add(1, 2); // 编译器可能直接替换为 sum = 1 + 2 return 0; }
注意:
  • inline是“建议”而非“命令”:编译器可能忽略该建议(例如函数体过大时)。
  • 内联函数通常定义在头文件中(避免链接错误),且适合短小、频繁调用的函数(如工具函数)。
  • 递归函数、复杂循环的函数不适合声明为inline(会导致代码膨胀)。
三、nullptr:空指针常量(C++11 引入)

nullptr是专门表示“空指针”的关键字,用于替代 C 语言中的NULLNULL本质是(void*)00,可能引发歧义)。

用法:

代码语言:cpp

AI代码解释

#include <iostream> void func(int x) { std::cout << "int: " << x << std::endl; } void func(char* p) { std::cout << "char*: " << p << std::endl; } int main() { // NULL 会被当作 0 处理,调用 func(int) func(NULL); // 输出:int: 0(可能不符合预期) // nullptr 明确表示空指针,调用 func(char*) func(nullptr); // 输出:char*: (空指针) return 0; }
优势:
  • 类型安全:nullptr的类型是nullptr_t,仅能隐式转换为指针类型,避免NULL被当作整数的歧义。
  • 清晰表达意图:明确表示“这是一个空指针”,而非数字 0。
总结
  • 引用:变量的别名,用于简化指针操作、减少拷贝,需初始化且不能更改指向。
  • inline:建议编译器内联展开函数,适合短小函数,提高执行效率。
  • nullptr:C++11 后的空指针常量,替代NULL以避免类型歧义,更安全。

这三个特性是 C++ 基础语法的重要部分,理解它们有助于写出更简洁、高效、安全的代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 5:48:06

ChatGPT对话转Anki卡片:自动化工具实现与高效学习流搭建

1. 项目概述&#xff1a;从ChatGPT对话到Anki卡片的自动化桥梁最近在整理学习笔记时&#xff0c;我发现了一个效率痛点&#xff1a;和ChatGPT的对话里充满了高质量的知识点&#xff0c;但要把它们变成可以复习的Anki卡片&#xff0c;过程却异常繁琐。复制、粘贴、手动制卡&…

作者头像 李华
网站建设 2026/5/15 5:48:06

Claude Code用户如何通过Taotoken解决API访问不稳定与token不足问题

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Claude Code用户如何通过Taotoken解决API访问不稳定与token不足问题 对于依赖Claude Code进行编程辅助的开发者来说&#xff0c;服…

作者头像 李华
网站建设 2026/5/15 5:44:26

如何让AI看懂歪斜的图片?从传统CV到深度学习,实战破解旋转验证码

1. 从传统CV到深度学习&#xff1a;图像旋转矫正的技术演进 第一次遇到旋转验证码时&#xff0c;我盯着那个歪斜的字母图案转了半小时鼠标滚轮。这种需要人工调整图片角度的验证机制&#xff0c;现在连菜鸟驿站取件都要面对。但作为开发者&#xff0c;我们完全可以用代码教会AI…

作者头像 李华
网站建设 2026/5/15 5:44:03

别再手动汇总了!锐捷BGP路由聚合实战:用aggregate-address优化你的路由表(含as-set、suppress-map详解)

锐捷BGP路由聚合实战&#xff1a;优化网络架构的智能选择 在大型企业网络架构中&#xff0c;BGP路由表规模的膨胀常常成为网络工程师的噩梦。当路由条目突破十万级别时&#xff0c;设备内存占用激增、路由收敛速度下降、网络稳定性面临严峻挑战。传统的手工汇总方式不仅效率低下…

作者头像 李华