我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL),而引用总是指对象.&obj + 5).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;如果它没有完全优化,则分配与指针相同的存储量,并将地址
i放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
那些之间是否有某种微妙的区别:
void a1(float &b) {
b=1;
};
a1(b);
Run Code Online (Sandbox Code Playgroud)
和
void a1(float *b) {
(*b)=1;
};
a1(&b);
Run Code Online (Sandbox Code Playgroud)
?
它们都是相同的(或者看起来似乎来自main()),但第一个显然更短,但我看到的大部分代码都使用第二种表示法.有区别吗?也许万一它是一些对象而不是浮动?
假设您有一个修改变量的函数.
你应该这样写:void myfunc(int *a)或者像这样void myfunc(int &a)?
前者强制你调用函数,myfunc(&b)因此调用者知道b将被修改,但后者更短,可以简单地调用myfunc(b).那么哪个更好用?还有什么我想念的吗?
这是一个非常基本的问题,但是,从C++专家那里听到它会很好.
在C++中有两种相似的方法来声明by-reference参数.
1)使用"星号":
void DoOne(std::wstring* iData);
Run Code Online (Sandbox Code Playgroud)
2)使用"&"":
void DoTwo(std::wstring& iData);
Run Code Online (Sandbox Code Playgroud)
每种方法的含义是什么?在任何情况下都有任何问题吗?
奖金#1:在#1和#2中调用方法的正式方法是什么?它们都被称为"按参考"吗?
奖金#2:故意使用std :: wstring.在每种情况下,对标准库类有什么影响?
可能重复:
c ++*vs&in函数声明
我知道这对你们许多人来说似乎是一个非常基本的问题,但我真的有一个不可能的时间找到一个好的,彻底的解释,尽管我最好的谷歌搜索.我确定答案就在那里,所以我的搜索条件一定很糟糕.
在C++中,各种符号及其组合用于标记参数(以及这些参数的参数).究竟是什么意思呢?
例:void func(int *var)和之间有什么区别void func(int **var)?怎么样int &var?
同样的问题代表返回类型以及参数.int& func(int var)与int* func(int var)?相比,意味着什么?在论证中,有何y = func(*x)不同y = func(&x)?
如果你能指出我正确的方向,我非常乐意阅读关于这个主题的大量文章.另外,我对一般编程概念非常熟悉:OO,泛型/模板等,而不是C/C++中使用的符号.
编辑: 似乎我可能给人的印象是我不知道指针是什么.我想知道那是怎么回事:)
所以为了澄清:我完全理解指针是如何工作的.我没有抓住,奇怪地无法找到答案的意思是,例如'void func(int&var)'.在一个赋值语句的情况下,"&"运算符将是对右侧,如在"诠释*X =&Y;",但在上述中,"&"操作者实际上是在左手侧.换句话说,它是在l值上运行,而不是在r值上运行.这显然不具有相同的含义.
我希望我现在更有意义吗?