C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++中`&`符号用法

C++中`&`符号用法全解析

作者:海青橘

在C++里,&有三种不同的含义,你代码里主要用,主要用于引用和取地址,理解&对于单例模式至关重要,避免复制对象、提升效率,本文逐行解析代码中所有&的含义、作用用和区别,帮助你完全掌握,立即查看

C++ 中&符号全解析(结合你的单例代码逐行讲透)

我直接结合你这段代码,把所有出现的 &、语法含义、作用、区别一次性讲清楚,新手也能完全看懂

先给你一个总览:

在 C++ 里,&3 种完全不同的含义,你的代码里用到了 2 种

  1. 引用(最常用,你的代码核心) → 变量/函数名前面的 &
  2. 取地址 → 极少用在单例里
  3. 按位与 → 这里完全不涉及

一、你的代码里所有&逐行解析

这里的&:引用(左值引用)

S& operator=(const S&) = delete;
// ↑这里                ↑这里

S&:返回值是引用

const S&:参数是引用

这里的&:引用

static S& gets() { return s1; }
//      ↑这里

这里的&:定义引用变量

S& s = S::gets();
// ↑这里

二、最重要:引用到底是什么?(用最简单的话)

引用 = 变量的别名

就像一个人有大名和小名,都是指同一个人

int a = 10;
int& b = a;

三、语法格式(背会这 4 种就够了)

1. 定义引用变量

类型 & 引用名 = 变量名;
int &b = a;
S &s = 对象;

2. 函数返回引用

类型 & 函数名() { ... }
S & gets() { ... }

作用:返回对象本身,不复制

3. 函数参数使用引用

void func(const 类型 & 参数名)
void func(const S & obj)

作用:高效传参,不复制对象。

4. 赋值运算符重载(规范写法)

类型 & operator=(const 类型 &)
S & operator=(const S &)

四、你的单例代码里为什么到处都要用&?

我告诉你核心原因,这是单例模式的灵魂:

单例 = 只能有一个对象

如果不用引用,就会复制出新对象,单例直接失效!

看对比:

错误写法(不用引用 → 复制对象 → 不是单例)

static S gets() { return s1; }
S s = S::gets();

这里会拷贝构造一个新对象,破坏单例!

正确写法(用引用 → 同一个对象 → 单例)

static S& gets() { return s1; }
S& s = S::gets();

S& 保证永远操作唯一的那个单例对象

五、最容易混淆的点:引用 & vs 指针 *

你只需要记住一句话:

引用 = 安全的、自动解引用的指针

特性引用 S&指针 S*
空值不能为空可以为空
重新赋值不能
访问成员.->
内存不占额外内存占指针内存

你的单例用引用,就是为了安全、简洁、不复制。

六、总结(最简单版本)

你代码里所有的&都表示

引用(别名)

语法规则:

  1. S& → 返回引用(返回对象本身,不复制)
  2. const S& → 参数引用(高效传参)
  3. S& s → 定义引用变量(别名)

一句话记住:

& 放在类型后面,就是引用,代表“别名”,不复制对象,操作同一个实体。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文