C++之 “&” 用法(总结)

目录

2.取地址运算符

3.引用声明

4.按引用传递参数

5.位与运算符

6.逻辑与运算符(&&的一部分)

7.在类中定义引用成员

8.在函数返回值中使用引用

9.在Lambda表达式中捕获引用


1.介绍

        在C++中,&符号有多种用途,具体作用取决于上下文。以下是&符号的主要用法:

2.取地址运算符

        &用于获取变量的内存地址。

int x = 10;
int* ptr = &x; // ptr 存储变量 x 的内存地址

        &x返回变量x的地址。

        通常用于指针的初始化或传递变量的地址给函数。

3.引用声明

        &用于声明引用变量。引用是变量的别名,操作引用相当于操作原变量。

int x = 10;
int& ref = x; // ref 是 x 的引用
ref = 20;     // 修改 ref 也会修改 x
std::cout << x; // 输出 20

        引用必须在声明时初始化,且不能重新绑定到其他变量。

        引用通常用于函数参数传递,避免拷贝额外开销。

4.按引用传递参数

        在函数参数中使用&,可以将参数按引用传递,而不是按值传递。

void increment(int& value) {
    value++; // 直接修改传入的变量
}

int main() {
    int x = 10;
    increment(x); // x 的值被修改为 11
    std::cout << x; // 输出 11
    return 0;
}

        按引用传递可以避免拷贝大对象,提高效率。

        如果不需要修改传入的参数,可以使用const引用,如const int&。

5.位与运算符

        &是位与运算符,用于对两个整数的二进制位进行按位与操作。

int a = 5;    // 二进制 0101
int b = 3;    // 二进制 0011
int c = a & b; // 结果 0001 (1)
std::cout << c; // 输出 1

        按位与运算常用于掩码操作或标志位的检查。

6.逻辑与运算符(&&的一部分)

        &&是逻辑与运算符,用于布尔表达式中。&也可以用于逻辑与,但它不会短路求值(使用&&时,若前一个条件为false,后一个条件就不会执行,称为短路求值)。

bool a = true;
bool b = false;
if (a && b) { // 逻辑与,短路求值
    // 不会执行,因为 b 为 false
}
if (a & b) { // 按位与,不会短路求值
    // 不会执行,因为 b 为 false
}

        &&是常用的逻辑与运算符,具有短路特性。(如果第一个操作数为false,不会计算第二个操作数)

        &是按位与运算符,也可以用于布尔运算,不会短路。

7.在类中定义引用成员

        在类中,可以使用&定义引用类型的成员变量。

class MyClass {
public:
    int& ref;
    MyClass(int& value) : ref(value) {} // 初始化引用成员
};

int main() {
    int x = 10;
    MyClass obj(x);
    obj.ref = 20; // 修改 x 的值
    std::cout << x; // 输出 20
    return 0;
}

        引用成员必须在构造函数中初始化,且不能重新绑定。

8.在函数返回值中使用引用

        函数可以返回引用,从而允许直接修改返回值引用的对象。

int& getMax(int& a, int& b) {
    return (a > b) ? a : b;
}

int main() {
    int x = 10, y = 20;
    getMax(x, y) = 30; // 修改 y 的值
    std::cout << y; // 输出 30
    return 0;
}

        返回引用时需要注意避免返回局部变量的引用,否者会导致未定义行为。

9.在Lambda表达式中捕获引用

        在Lambda表达式中,&用于按引用捕获外部变量。

int x = 10;
auto lambda = [&]() { // 按引用捕获所有外部变量
    x = 20;
};
lambda();
std::cout << x; // 输出 20

        [&]表示按引用捕获外部所有变量。也可以指定具体变量按引用捕获。如[&x]。

10.总结

        &符号的多种用途使它在C++中非常重要,理解其在不同上下文中的含义是掌握C++的关键之一。

如有错误,敬请指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值