【问题标题】:Difference between `int* const& x` and `int* const x` in C++C++中`int* const& x`和`int* const x`的区别
【发布时间】:2021-06-21 09:45:03
【问题描述】:

我已经读过按值传递、按引用传递和按常量引用传递(指针)之间的区别,但我不明白后者与仅传递常量指针之间的区别。举个例子,有什么区别

int PI = 3;

int* getArg(int* const& x){
    x = Π
    return x;
}

int main() {

}

int PI = 3;

int* getArg(int* const x){
    x = Π
    return x;
}

int main() {

}

这两者都导致相同的error: assignment of read-only parameter 'x'

【问题讨论】:

  • 您会收到错误,因为指针x 是常量,您无法修改它。 int* const x 可以读作“x 是一个指向(非常量)int 的常量指针”。
  • 这是什么教科书,他们为什么要这样对你?在现代 C++ 代码中,您尽可能避免使用有利于引用的指针。使用指针 引用你会弄得一团糟,除非你通过引用来操作指针,否则绝对没有必要,在这种情况下 const 不适用。
  • 在教材的上下文中,如果附有一些解释,它可能是有意义的,但在野外我会认为int* const& x 是一个需要修复的混淆
  • 是的,它与int* const& x 相同,它以“x 是对...的引用”开头,但其他方面相同。不,两者之间没有真正的区别。仅当您打算更改指针指向的位置时,通过引用传递指针才有意义。
  • 哦,极客的极客。你应该停止阅读那个网站。它以糟糕的代码风格、错误的信息和错误而闻名。

标签: c++ pointers reference


【解决方案1】:

如果您清楚按值和按引用传递变量,请尝试将复杂类型分解为多个部分,以帮助理解正在发生的事情:

using PointerToInt = int*;
using ConstPointerToInt = PointerToInt const;

int* getArg_v1(ConstPointerToInt x) {
    x = Π  // it's const by value so you're not allowed to change it
    return x;
}

int* getArg_v2(ConstPointerToInt& x) {
    x = Π  // it's const by reference so you're not allowed to change it
    return x;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多