Exceptions - meaning of '&' sign
我现在正进入C++的异常,我注意到我以前使用过的一个字符,但不是这样的。这是cplusplus.com使用的&;符号,如下所示:
当我把它和这样的指针一起使用时:
如果字符的两种用法完全不同,那么它们有什么不同?
按位与(二进制运算符)
10x010 & 0x100 == 0x110(一元运算符)的地址
1
2int x = 42;
int* p = &x;引用(当类型的一部分时)
1
2int x = 42;
int& r = x;
你看的是后者。
这并不特定于异常;它只是意味着您正在捕获对作为异常抛出的对象的引用。这意味着您不需要复制异常对象,这会提高代码的安全性,特别是考虑到它当前正在处理一个意外(或"异常")场景。
是时候读你的C++书了!
它们是不同的。
1 | pointer = &var; |
说
1 | catch (exception& e) |
他说,当
我们通常在函数参数中使用:
1 2 3 4 5 | void mySwap (int& a, int& b) ... ... mySwap (x, y); |
我们输入x表示a,输入y表示b,但我们不会像没有x和y时那样输入副本;我们自己输入x和y。(从技术上讲,我们通过"引用"来传递它,但这就是它的意义所在。)如果我们想改变x和y,这是很重要的,但这也是一种避免复制麻烦的简便方法。如果要跳过复制,但不使参数可更改,请使用const:
1 | void myFunction (const Type& thingThatMustNotChanged); |
在C++中,运算符"&"可以被重载。这意味着同一个操作符在不同的上下文中可以有不同的含义。C++中有许多可以重载的运算符。
"&;"运算符通常有三种含义:
在参考案例中:
1 2 | int val1 = 2; int &rval = val1; |
在上述情况下
1 | rval |
是指
1 | val1 |
这意味着
1 | rval |
实际上是使用
1 | val1 |
注意:引用不是对象。这意味着引用不会占用内存中的任何空间,而普通引用只能绑定到非常量对象。但不是常量对象、文本或表达式的结果。
现在在指针的情况下:
1 2 | int val1 = 2; int *ptr = &val1; |
在这种情况下,"val1"的地址存储在"ptr"中。但是指针是一个对象,这意味着当我们使用取消引用操作符"*"时,我们使用的是指向值。但是当我们不使用指针的时候。
1 2 | *ptr = 55 // pointed to value is changed ptr = p; // the pointer's own memory |
*最后但不是最不重要的,用作位运算符:
位运算符用于二进制数字(即0和1)。当我们使用"&;"时,这意味着我们使用的是位"和"运算符。这是一个二元运算符,意味着它可以处理两个操作数。这里的"按位和"运算符测试两个位是否都包含二进制数字"1",如果是,则结果为1,否则为0。
*不要与包含两个"&;&;"的"逻辑与"运算符混淆。