例外 - '&'标志

时间:2015-02-06 15:09:41

标签: c++

我现在正在C ++上遇到异常,我注意到之前使用的一个字符,但不是这样的。这是&标志,由cplusplus.com用作: catch (exception& e)

虽然我之前使用过像这样的指针: pointer = &var为指针指定了var变量的位置。

& amp;的两种用途有何不同?角色,如果它们完全不同?

3 个答案:

答案 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和'运算符混淆。