Flo*_*dis 1 c++ reference auto c++11
在进行代码维护时,我找到了这样的代码:
auto networkEntry = _networkEntries[key];
networkEntry.port = port;
networkEntry.scope = scope;
Run Code Online (Sandbox Code Playgroud)
用于的地图数据类型_networkEntries有两个重载版本operator[]:
template<class T>
class Map {
// ... simplified STD compatible container ...
T & Map::operator[](const Key & key);
const T Map::operator[](const Key & key) const;
};
Run Code Online (Sandbox Code Playgroud)
地图中使用的数据类型很简单struct.
现在我只是想知道,返回的值auto可以是数据结构的副本,也可以是对数据结构的引用.如果返回副本,则分配不会影响映射中的存储值.
我对这个案子有三个相关的问题:
operator[]使用的是哪个版本?auto,以确保使用参考?auto networkEntry = _networkEntries[key];
Run Code Online (Sandbox Code Playgroud)
这里networkEntry永远不会是引用类型,因为auto类型推导规则遵循模板参数推导规则.
简而言之,您需要说:
auto& x = y;
y可以绑定到左值引用时才会编译.auto&& x = y;
y. decltype(auto) x = y;
将精确推断出y它的类型- 它可以推导出引用或值类型.看看decltype(auto)有哪些用途?.
正如Yakk所说,如果y不是引用类型,则x成为绑定到非引用临时的rvalue引用y.
为了推断出一个参考.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |