【问题标题】:How to get the value of a value passed by reference in C++如何在 C++ 中获取通过引用传递的值的值
【发布时间】:2009-11-04 09:54:26
【问题描述】:

我有一个具有以下声明的函数:

void cleanValid(int valid[][4], int &size, int index);

在实现此函数时,我需要设置另一个计数器,该计数器等于通过引用传递的整数大小。我尝试做类似的事情:

int count;
count = size;

如果我没记错的话,当我改变 count 的值时,它也会改变 size 的值。我不能让这种事情发生。我将如何将 size 的值复制到 count 并保持它们独立?

【问题讨论】:

  • 另外,最好写int count = size;,未初始化的变量是一场噩梦,如果您将它们全部激活,您的编译器应该会提供警告。如果你想要一个更广泛的范围,例如使用一个神奇的值来初始化int count = 0;,但不要让它处于未定义的值(c++ 不保证内置将被初始化,尽管在调试模式下一些编译器会这样做它仍然像 VC++)。
  • IMO 最好不要初始化该值,而不是使用魔法初始化值。如果您不小心最终使用了未初始化的变量,则很有可能会出现编译器警告。如果你不小心使用了一个无意义的值,你的代码就不会做它应该做的事情,你当然不会得到任何警告。对于 0 表示某种含义的情况,应保存使用 0 的显式初始化。

标签: c++ pass-by-reference


【解决方案1】:

不,你搞错了。当您从引用读取到非引用变量时,您不会在两者之间建立任何类型的联系。届时您将拥有size 值的独立副本,仅此而已。

如果您想要影响size 的值,则必须使用对它的引用:

int& count = size;

/* ... */    
count= 32;  /* This will change size, too. */

【讨论】:

    【解决方案2】:

    如果您不希望 size 发生变化,为什么不通过值/常量引用传递?

    void cleanValid(int valid[][4], int size, int index);
    

    void cleanValid(int valid[][4], const int &size, int index);
    

    在这两个选项中,您确保 size 不会更改 - 通过让编译器处理它。

    【讨论】:

    • 另外,在第一个示例中,您具有能够直接使用 size 的优势。你可以用它做任何你想做的事情,你不需要再次将它复制到局部变量中。此外,在某些情况下,int 比引用小,因此要复制的内容可能更少。
    【解决方案3】:

    int count = size 复制 size 的值到 count 中。如果在修改副本后更改计数,大小将不受影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多