【问题标题】:Call by reference of bool types [duplicate]通过引用布尔类型调用[重复]
【发布时间】:2014-07-13 19:45:16
【问题描述】:

如何将这段代码更改为有效的?!

#include <iostream>

void foo( bool &b )  // ERROR in passing argument 1 of ‘void foo(bool&)’
{
   std::cout << b << '\n';
}

int main()
{
  foo( false );   // ERROR invalid initialization of non-const reference of type ‘bool&’ from a temporary of type ‘bool’
  return 0;
}

请注意,我想要使用 &amp;b 的引用调用方法。

【问题讨论】:

  • 使用 const bool& 代替 bool&
  • 在你的例子中,你为什么需要它作为参考?
  • @omid 或者简单的bool
  • @keyser:这是一个更大代码的sn-p!
  • 另请注意,这与 bool 的类型无关。

标签: c++ boolean pass-by-reference


【解决方案1】:

引用调用需要一个地址,您传递的是一个常量。为什么没有

bool aValue;
aValue = false;
foo(aValue);

【讨论】:

  • 这也是可以的。
  • 其实并不需要“地址”。
  • 如果我错了,请原谅我,但传递给函数的不是堆栈/堆上的内存位置,而不是驻留在内存位置的值吗?
  • 这将是一个实现细节。从语义上讲,引用只是对象的别名。在这种情况下,需要的是一个 lvalue
【解决方案2】:
foo( false );

这会使用 bool 类型的临时对象调用 foo。

您不能将临时引用绑定到非常量引用,因此会出现错误。在 const 引用的情况下是可能的

void foo( const bool &b );
//...
foo( false ); // OK

在您的情况下,您似乎不想更改传递给函数的对象,而只是打印它。那么就不需要传引用了,直接传值就行了。

void foo( bool b ) { std::cout << b;}
//...
foo( false ); // OK

【讨论】:

  • Then there is no need to pass a reference, you can just pass object by value. 仅适用于小物体。如果传递的对象是一个大型数据结构怎么办?还是有 &。
猜你喜欢
  • 2019-11-02
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 2013-10-31
  • 2019-11-04
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多