C++ 中 & 的多种用法

int age = 30; // 定义int型变量
int *page = &age; // 定义int *指针page, 指向age

// 修改指针解引用来修改变量
*page = 50;
std::cout << *page << "," << age << std::endl;

用法①:取地址运算符,&放在一个变量名之前时,它是一个一元运算符,用于获取该变量的内存地址。int *ptr = &var; 中的&var就是取var变量的地址

int age = 30;
int &ref_age = age; // ref_age是age的引用,改变ref_age等同于改变age

用法②:引用声明符,&放在类型名称后面和变量名前面时,它用于声明一个引用变量。此时,它不是取地址,而是定义了一个新变量,它是另一个已存在变量的别名。例如,int &ref_age = age; 中的&是用来声明ref_age是一个引用,它引用的是age变量

void increment(int &num) {
    num++;
}
int z = 5;
increment(z); // z的值现在变为6

用法③:作为参数传递,在函数的参数列表中,使用&可以声明引用参数,这个函数体内形参发生变化实参也会随之改变

#include <iostream>

class MyClass {
public:
    // 成员变量m_ref是int的引用
    int &m_ref;

    // 构造函数接受一个int类型的引用参数,并用它初始化m_ref
    MyClass(int &ref) : m_ref(ref) {
        // 初始化列表中使用&来绑定传入的引用到成员m_ref
    }
    
    // 方法用于修改m_ref所引用的值
    void modifyReferencedValue(int newValue) {
        m_ref = newValue;
    }
};

int main() {
    int externalValue = 10;
    MyClass obj(externalValue); // 将externalValue的引用传递给MyClass的构造函数
    
    std::cout << "Before modification: " << externalValue << std::endl;
    obj.modifyReferencedValue(20); // 通过对象修改引用的值
    std::cout << "After modification: " << externalValue << std::endl; // 输出20,因为obj.m_ref和externalValue是同一个值的不同引用

    return 0;
}

用法④:在C++11及以后的版本中,可以在类的构造函数初始化列表中使用引用,以此来初始化类的引用类型成员变量。这样做可以让类的成员直接引用外部对象,从而实现共享状态或提供一种直接操作外部资源的方式。不过,需要注意的是,当成员变量是引用类型时,构造函数在创建对象时必须明确地初始化这个引用成员,且不能默认初始化

int &getRefToX() {
    static int x = 0;
    return x;
}

int main() {
    int &refX = getRefToX();
    refX = 10;
    std::cout << getRefToX(); // 输出10,因为refX修改了静态变量x的值
    return 0;
}

用法⑤:作为返回类型,函数也可以返回引用,允许函数直接修改外部变量或返回对象的引用以便连续修改

int a = 5; // 二进制表示为0101
int b = 3; // 二进制表示为0011
int c = a & b; // c的结果为1 (二进制0001)

用法⑥:位与运算符,在表达式中,当&两边都是整数时,它作为位与运算符,对两个操作数的每一位执行逻辑与操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值