【问题标题】:Testing if something is a reference to something else测试某事物是否是对其他事物的引用
【发布时间】:2013-03-06 08:25:29
【问题描述】:

假设我有:

  std::vector<Foo> v1;
  std::vector<Foo> v2;
  std::vector<Foo>& rV = v1;

我怎样才能做这样的测试:

  TEST_EQ(v1, rV);
  TEST_NOT_EQ(v2, rV);

我认为这对于那些对代码进行单元测试的人来说是一个常见问题。

【问题讨论】:

  • 要查看它们是否真的是相同的底层vector,您可以简单地比较它们的地址。 (如果不是,那么您的测试断言将需要进行元素比较)。

标签: c++ boost c++98


【解决方案1】:

您可以通过比较它们的地址来检测两个对象是否相同。

if (&v1 == &rV)

仅当它们引用相同的向量时才为真。

(当然假设您没有重载地址运算符:-)

【讨论】:

  • 我认为只要不改变向量,这将起作用,例如使用推回。如果向量改变,那么地址可能不同。在向量操作之前使用保留确实可以缓解这种情况。
  • 这对于向量的成员来说是正确的,但我们正在比较向量对象本身的地址。这不会改变。
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
相关资源
最近更新 更多