标题:
对 std::map<string,string> m; 是否可以 auto x = m["abc"];
[打印本页]
作者:
admin
时间:
2018-6-30 13:04
标题:
对 std::map<string,string> m; 是否可以 auto x = m["abc"];
std::map m; auto x = m["abc"];
如果可以,那么对 map 有这样的定义:
template<keytype,valuetype,.>
class map {
valuetype & operator[](const keytype &); // 这个最有可能
valuetype & operator[](keytype ); // 这种总会生成临时对象,效率太低
valuetype & operator[](const char *); // 这样当然可以使上面调用成立,但要考虑到map是一个模板类,
// 它的键类型,可以是字符串,也可以是其它类型,如对map<int,string> 按"abc" 取到值,是什么鬼?
}
但跟了一下源代码,到string的移动构造函数里去了,什么情况?
作者:
admin
时间:
2018-7-1 00:14
实际是,map还定义了两个版本,用来取值:
valuetype& operator[](keytype&& _Keyval); // 移动版本,
valuetype & operator[](const keytype &); // 常量引用版本
auto x = m["abc"]; // 等价: auto x=m[string("abc")]
// 先用“abc”初始化一个string ,然后调用 移动版本 取值
string k="abc"; // 先初始化string,
auto x = m[k];// 调用常量引用版本取值
两者方法,执行效率有差吗? 没有,都需要生成一个临时string 对象,
当然,移动版本更简洁
* 移动版本特别钟爱临时对象,如影随形!临时对象没有名份,用完即扔,惨
欢迎光临 杰表技术论坛 (http://bbs.jatools.com/)
Powered by Discuz! 6.1.0