我现在正在C ++上遇到异常,我注意到之前使用的一个字符,但不是这样的。这是&标志,由cplusplus.com用作:
catch (exception& e)
虽然我之前使用过像这样的指针:
pointer = &var
为指针指定了var
变量的位置。
& amp;的两种用途有何不同?角色,如果它们完全不同?
答案 0 :(得分:8)
&
有三种含义:
按位AND(二元运算符)
0x010 & 0x100 == 0x110
地址(一元运算符)
int x = 42;
int* p = &x;
参考(部分类型)
int x = 42;
int& r = x;
你正在看后者。
这不是特例;它只是意味着您将引用捕获到作为异常引发的对象。这意味着您不需要复制异常对象,这会增加代码的安全性,特别是考虑到它当前正在处理意外(或#34;异常")方案。
时间阅读that C++ book of yours ......!
答案 1 :(得分:1)
他们是不同的。
pointer = &var;
表示pointer
获取var
的地址。
catch (exception& e)
说当传递e
时,我们不会复制它,而是传递它本身。
我们通常在函数参数中使用它:
void mySwap (int& a, int& b) ...
...
mySwap (x, y);
我们传入x代表a和y代表b,但是如果没有&amp ;;我们就不会传递副本。我们自己传递x和y。 (从技术上讲,我们通过“引用”传递它,但这就是它的含义。)如果我们想要改变x和y,这是必不可少的,但它也是一种不会麻烦制作副本的方便方法。如果要跳过复制但不使参数可更改,请使用const:
void myFunction (const Type& thingThatMustNotChanged);
答案 2 :(得分:0)
在C ++中,运营商'&'可以超载。这意味着相同的运算符在不同的上下文中可以具有不同的含义。 C ++中有许多可以重载的运算符。
'&'运算符通常有3个含义:
在参考案例中:
int val1 = 2;
int &rval = val1;
在上述情况
rval
是对
的引用val1
这意味着任何使用
rval
实际上是
的使用val1
注意:引用不是对象。这意味着引用不占用内存中的任何空间,并且普通引用只能绑定到非const对象。但不是const对象,文字或表达式的结果。
现在在指针案例中:
int val1 = 2;
int *ptr = &val1;
在这种情况下,'val1'的地址存储在'ptr'中。但是指针是一个对象,这意味着当我们使用解除引用运算符'*'时,我们使用指向的值。但是当我们没有使用指针时。
*ptr = 55 // pointed to value is changed
ptr = p; // the pointer's own memory
*最后但并非最不重要,用作按位运算符:
按位运算符使用二进制数字(即0和1)。当我们使用'&'时,这意味着我们正在使用按位'和'运算符。这是一个二元运算符,这意味着它可以使用两个操作数。这里'按位和'运算符测试这两个位是否包含二进制数字'1',如果是,则结果为1,否则为0。
*不要与包含两个'&&'的'logical和'运算符混淆。