我想知道如果使用auto
或其他类似声明变量/ iterator/CallItWhatIsMoreAppropriate的东西)会每次都创建一个该项目的实例吗?一个例子会说清楚:`auto`每次都创建一个新的变量实例?
void my_fun (std::unordered_map<std::string, std::string> & my_map) {
std::string search_str;
cin >> search_str;
while (search_str != "something") {
//Does the next line create an extra overhead each time?
auto search = my_map.find(search_str);
if (search != my_map.end())
{
std::cout << "found \n";
//I should be able to modify the element inside the map here.
} else {
my_map.insert({search_str, search_str});
}
cin >> search_str;
}
}
使用'auto'没有任何开销,并且您应该始终在可以正确初始化的地方定义变量。 –
@NeilButterworth我认为这是一个重要的问题,只有在需要时才声明变量,然后使用该实例,特别是声明在循环内可以运行数百万甚至数十亿次。 –
“使用'auto'”在这里并不意味着什么。 'auto'只是类型名称的替代品。你真正要问的是在循环中声明一个_local变量_的后果。你的'search'是一个局部变量。这不是因为你在声明中使用了'auto';这是因为你在哪里宣布它。 –