在c++中使用引用和指针的意义是什么?
What is the point of using references and pointers in C++?
我读过类似的问题,但在学习了几周c++之后,我很好奇的一件事是:为什么在c++中使用指针或引用?
甚至不是为什么使用其中一个而不是另一个,而是为什么不使用原始值?
默认情况下,在c++中东西是按值传递的,如果总是传递原始值,那么不会消除很多混乱和意外的副作用吗?
仅仅是为了在堆栈上传递一个更小的值吗?
原因很多。一般来说,使用它是因为性能。
复制对象消耗内存、CPU和时间。如果你复制了你作为参数传递给函数的每一个对象,即使这个对象不需要因为任何特殊的原因而被复制,你的应用程序的性能也会很差。
传递每个非基本类型的参数是有意义的,读取struct
s和class
es,作为引用或指针,除非你有很好的理由不这样做。
你可能还想传递一个对象或变量给一个函数,然后在它的原始位置修改它。如果你传递这个变量的副本,函数不会修改它,它只会修改它的一个临时的,易变的副本。你必须传递这个变量或对象作为引用或指针,这样函数才有办法修改它。
如果你想使用原始结构或值,唯一的选择就是使用引用或指针;例如
void pass_by_value(int x)
{
// x is a *copy* of whatever gets passed in, not the original
}
void pass_by_reference(int &x)
{
// x refers what got passed in, not a copy of what got passed in
}
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 以下与指针相关的代码的输出是什么?
- 指针类型类成员的动态强制转换的恒定性是什么?
- 指针算术规则中的"possibly-hypothetical"是什么意思?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- "*&n"在双指针 C++ 中是什么意思?
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- 在接口中使用通用指针的原因/正确情况是什么
- 使用作为参数返回的指针的最佳做法是什么
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- 键入擦除成员函数指针的"right"方法是什么?