C/C++ 中的 C++ 引用和常量指针

标签 c++ c pointers reference

最近,当我向某人解释指针和引用(在 C++ 编程的上下文中)之间的基本区别时,我告诉了通常的解释,这些解释讨论了不同的函数参数传递约定——按值调用、按指针调用、按引用调用,以及所有关于引用的相关理论。

但后来我想到无论 C+ 引用在参数传递方面做了什么,(允许一种传递大型结构/对象的内存有效方式,同时通过不允许被调用者修改传递的对象的任何变量来保证它的安全作为引用,如果我们的设计需要的话)

C 中的 const 指针可以实现相同的目的,例如如果需要传递结构指针,比如 struct mystr *ptr,通过将结构指针强制转换为常量 -

func(int,int,(const struct mystr*)(ptr));

ptr 不是某种等同于引用的东西吗?

  1. 它不会以不复制结构(通过指针传递)来提高内存效率的方式工作,但由于它作为常量指针。

    在 C++ 对象上下文中,我们可以传递 const 对象指针而不是对象引用来实现相同的功能)

  2. 如果是,那么 C++ 中的哪些用例场景需要引用。 引用的任何具体好处和相关的缺点?

谢谢。

-广告

最佳答案

您可以将 const 引用绑定(bind)到右值:

void foo(const std::string& s);

foo(std::string("hello"));

但是传递一个右值的地址是不可能的:

void bar(const std::string* s);

bar(&std::string("hello"));   // error: & operator requires lvalue

引用被引入到语言中以支持运算符重载。您希望能够说a - b,而不是&a - &b。 (注意,后者已经有含义:指针减法。)

引用主要支持通过引用传递,指针主要支持引用语义。是的,我知道,在 C++ 中,区别并不总是很清楚。

关于C/C++ 中的 C++ 引用和常量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4235599/

相关文章:

c++ - 如何在c++中使用迭代器的倒数第二个位置

c++ - C++ 中的这种未定义行为是从悬空指针调用函数吗

c++ - 为字符数组C++分配额外的内存

c++ - MPI 发送矩阵列 (C++)

android - 在android中使用opencv将检测到的人脸与现有人脸数组进行比较

c - 指针算术不起作用

用于标准偏差的 python c 扩展

c - 关于循环缓冲区中简洁索引处理的建议

c - 缓冲区的指针与双指针

C++智能指针循环链接