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++的关键之一。
如有错误,敬请指正!!!