C++ - 返回对向量元素的引用

Gre*_*eco 0 c++ return reference stdvector

我想返回对作为参数的向量中的单个元素的引用,然后比较那些内存地址.我的代码的简化示例如下所示:

const int &test(std::vector<int> i) {
    return i.at(3);
}

TEST(test, all_test) {
    const std::vector<int> i = {1,2,3,4,5};
    const int &j = test(i);
    ASSERT_THAT(&j, Eq(&i.at(3)));
}
Run Code Online (Sandbox Code Playgroud)

使用此我收到以下错误消息:

Failure
Value of: &j
Expected: is equal to 0x55da7899d4dc
  Actual: 0x55da7899d4fc (of type int const*)
Run Code Online (Sandbox Code Playgroud)

如何返回对单个向量元素的引用?

小智 7

您正在按值传递向量,因此您将返回对临时元素的引用.如果你通过引用传递矢量,你应该没问题.

  • 通过引用传递并将第一个参数标记为`const`(否则它不编译,你可以只使`i`为非const)使你的代码按预期工作. (2认同)