我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL),而引用总是指对象.&obj + 5).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;如果它没有完全优化,则分配与指针相同的存储量,并将地址
i放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
我无法帮助它,但这个基本问题在我的脑海里浮现:为什么C++在你可以使用指针时也有引用?
我知道在某些情况下它们会稍微安全一些,而且往往使代码更漂亮,但从技术上讲,没有区别,对吧?那么有什么情况我不能用指针和引用是必须的吗?
我想看看何时使用引用的具体例子是不可避免的.
免责声明:
我在StackOverflow上没有找到任何答案,这不是关于语法差异的问题.我想知道为什么C++语言首先引入了引用.
作为我的第一门编程语言,我学习了Java,但是由于我改为另一所大学,我现在正在学习C++.
来自Java并学习C++的基础知识,我阅读了有关引用和引用变量的内容.它们有多危险,如何小心它们等等.
因此,在我脑海中出现了一个简单的问题:为什么我要使用那种复杂的,因此可能引起问题的东西呢?
它是不是值得,或者只是RAM大约64MB的时候的遗物?
由于很多答案都提到了指针:这个概念显然来自石器时代,imho.除了高性能计算,我甚至不会触及那些东西.
我认为这个问题最好用我刚写的一个小代码片段:
#include <iostream>
using namespace std;
class BasicClass
{
public:
BasicClass()
{
}
void print()
{
cout << "I'm printing" << endl;
}
};
class FriendlyClass
{
public:
FriendlyClass(BasicClass& myFriend) :
_myFriend(myFriend)
{
}
void printFriend()
{
cout << "Printing my friend: ";
_myFriend.print();
}
private:
BasicClass& _myFriend;
};
int main(int argv, char** argc)
{
FriendlyClass* fc;
{
BasicClass bc;
fc = new FriendlyClass(bc);
fc->printFriend();
}
fc->printFriend();
delete fc;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码使用g ++编译并运行良好:
$ g++ test.cc -o test
$ …Run Code Online (Sandbox Code Playgroud) 提供,我想将一个可修改的参数传递给一个函数,我应该选择什么:通过指针传递它还是通过引用传递它?
我问这个是因为我一直认为通过引用(1)传递参数是最好的做法,但在检查了一些本地代码数据库后,我得出结论,最常见的方法是(2).此外,该男子本人(Bjarne Stroustrup)建议使用(2).(1)和(2)的[dis]优点是什么,还是仅仅是个人品味的问题?
可能的重复:
为什么使用指针?
将可修改的参数传递给c ++函数
为什么我想要指针参数?我能看到的唯一原因是小功能试图减少混淆和更小的内存占用.