在这种情况下 g++ -Wdangling-reference 警告是否合理?

问题描述 投票:0回答:1

使用 gcc 13.2

-Wdangling-reference
编译我的代码,我很惊讶在这个简单的场景中(godbolt):

#include <vector>
#include <string>

std::string& add_variable(std::vector<std::string>& vars, const std::string& var)
   {
    vars.push_back( var );
    return vars.back();
   }

int main()
{
    std::vector<std::string> vars;
    const std::string& var = add_variable(vars, "name");
}

编译器警告:

<source>:13:41: warning: possibly dangling reference to a temporary [-Wdangling-reference]
   13 |     const std::string& var = add_variable(vars, "name");
      |                        ^~~
<source>:13:59: note: the temporary was destroyed at the end of the full expression 'add_variable(vars, std::__cxx11::basic_string<char>(((const char*)"name"), std::allocator<char>()))'
   13 |     const std::string& var = add_variable(vars, "name");
      | 

这是误报还是我在这里遗漏了一些重要的东西?

c++ reference g++ compiler-warnings gcc-warning
1个回答
1
投票

确实,这看起来像是误报。

var
指的是你的
std::string
中的
vector<string>
,它在完整表达后仍然非常活跃。

© www.soinside.com 2019 - 2024. All rights reserved.