clang错误:非const左值引用无法绑定到不兼容的临时

ran*_*ght 5 c++ compiler-errors clang

我有一段代码可以正常使用MSVC,但无法使用clang ++进行编译

void MyCass::someMethod()
{
   std::wstring key(...);
   auto& refInstance = m_map.find(key); // error here
}
Run Code Online (Sandbox Code Playgroud)

其中m_map定义为

std::map<const std::wstring, std::shared_ptr<IInterface>> m_map;
Run Code Online (Sandbox Code Playgroud)

和clang抱怨

non-const lvalue reference cannot bind to incompatible temporary
Run Code Online (Sandbox Code Playgroud)

我有点明白,临时正在创建,但不知道如何解决这个问题.有任何想法吗?

jua*_*nza 7

rvalues不能绑定到非const引用.MSVC有一个"扩展允许这样做.要符合标准,你需要

const auto& refInstance = m_map.find(key);
Run Code Online (Sandbox Code Playgroud)

但是这会返回一个迭代器.使用对迭代器的引用是不常见的.价值很好:

auto refInstance = m_map.find(key);
Run Code Online (Sandbox Code Playgroud)

  • @randomThought是的,但你不需要参考. (3认同)