例外情况-符号“&”的含义 我现在正进入C++的异常,我注意到我以前使用过的一个字符,但不是这样。这是一个符号(&s),由cplusplus.com用作: 捕获异常&e
而我以前用过这样的指针: pointer=&var,它为指针提供了var变量的位置例外情况-符号“&”的含义 我现在正进入C++的异常,我注意到我以前使用过的一个字符,但不是这样。这是一个符号(&s),由cplusplus.com用作: 捕获异常&e,c++,C++,而我以前用过这样的指针: pointer=&var,它为指针提供了var变量的位置 如果&字符的两种用法完全不同,那么它们有什么不同?有三种含义&: 位二进制运算符 0x010 & 0x100 == 0x110 int x = 42; int* p = &x; 一元运算符地址 0x010 & 0x100 == 0x110 int x = 42; int* p = &x; 作为类型的一部分时引用 int x = 42; int& r = x;
如果&字符的两种用法完全不同,那么它们有什么不同?有三种含义&: 位二进制运算符
0x010 & 0x100 == 0x110
int x = 42;
int* p = &x;
一元运算符地址
0x010 & 0x100 == 0x110
int x = 42;
int* p = &x;
作为类型的一部分时引用
int x = 42;
int& r = x;
你看到的是后者
这并不特定于例外情况;这只意味着您正在捕获作为异常抛出的对象的引用。这意味着您不需要复制异常对象,这提高了代码的安全性,特别是考虑到它当前正在处理意外或异常情况
该读了 它们是不同的
pointer = &var;
表示指针获取var的地址
表示当传入e时,我们不会复制它,而是传入对象本身
我们通常在函数参数中使用此选项:
void mySwap (int& a, int& b) ...
...
mySwap (x, y);
我们把x传给a,把y传给b,但我们不会像没有&时那样传副本;我们自己传递x和y。从技术上讲,我们通过引用传递它,但这就是它的含义。如果我们想改变x和y,这是很重要的,但这也是一种避免麻烦复制的简便方法。如果要跳过制作副本但不更改参数,请使用常量:
void myFunction (const Type& thingThatMustNotChanged);
<>在C++中,运算符'& '可以重载。这意味着同一个操作符在不同的上下文中可以有不同的含义。C++中有许多操作符可以重载。 “&”运算符通常有3种含义: 在参考案例中:
int val1 = 2;
int &rval = val1;
在上述情况下
rval
是指
val1
这意味着任何使用
rval
实际上是使用
val1
注意:引用不是对象。这意味着引用不占用内存中的任何空间,普通引用只能绑定到非常量对象。而不是常量对象、文本或表达式的结果
现在在指针的情况下:
int val1 = 2;
int *ptr = &val1;
在这种情况下,“val1”的地址存储在“ptr”中。但是指针是一个对象,这意味着当我们使用解引用操作符“*”时,我们使用的是指向的值。但当我们不这样做时,我们使用的是指针
*ptr = 55 // pointed to value is changed
ptr = p; // the pointer's own memory
*最后但并非最不重要的一点,用作位运算符:
按位运算符处理二进制数字,即0和1。当我们使用“&”时,这意味着我们使用的是按位“and”运算符。这是一个二进制运算符,意味着它与两个操作数一起工作。这里的“按位and”运算符测试两个位是否都包含二进制数字“1”,如果是,则结果为1,否则为0
*不要与包含两个“&&”的“逻辑and”运算符混淆。您使用的是哪本书在引用之前教导异常?我认为最好将引用视为一个指针,就像使用常规对象一样。就像指针一样,您可以拥有对不再存在的对象的引用。根据使用情况,多次引用将编译成指针。@Dave:就像指针一样,您可以拥有对不再存在的对象的引用。不,我的意思是,当你搞乱了你可以在物理上达到这种状态,但只有在你已经违反了C++语言的先决条件,这样你就不再写它了。因此,在C++中,不可能。@ C++语言中的@ LeNNECSRESIN轨道先决条件?你得详细说明。这几乎和使用指针一样容易——它打破的唯一先决条件是您在自己的程序中所做的任何事情。自动a=使_唯一;A&b=*A;a、 重置;-那里还没有坏东西,我想我理解你。但我们在这里面对的是一个初学者。我不想让他感到困惑,因为我不想说,这很像一个指针,他可能还没有完全理解,除了不完全理解。@Dave:胡说。你有一份悬而未决的推荐信。