C++ auto 的使用
2021-02-15 20:21
标签:air cout font 返回 ios ret namespace pre string 在C++ 98 中,auto 的作用是让变量成为自动变量(拥有自动的生命周期),但是该作用是多余的,变量默认拥有自动的生命周期,在C++ 11 中,已经删除了该用法,取而代之的作用是:自动推断变量的类型。 0.代替冗长复杂,变量使用范围专一的变量声明 1.需要改变迭代对象 for(auto &i:s) 2.不需要改变迭代对象 for(auto i:s) 3.迭代map 4.迭代vector 5.在定义函数模板时,用于声明依赖模板参数的变量类型,模板函数依赖于模板参数的返回值 注意事项: (1)auto 变量必须在定义时进行初始化操作(这很好理解,如果不进行初始化操作,那么 auto 关键字就不能进行变量类型的推导了) (2)定义一个 auto 序列的变量时,必须是同一种类型,如: auto a = 1, b = 2, c = 3; // 正确 auto a = 1, b = 2.2, c = ‘c‘; // 错误(这个道理和第一点注意事项相同) (3)如果表达式是引用,则去除引用语义 int32_t a = 1; int32_t& b = a; auto c = b; // 此时c的类型被推导为 int32_t,而不是int32_t& auto& c = b; // 此时c的类型才是int32_t&(自我理解,定义一个引用,那么就直接操作的是b,而b的类型是int32_t&,所以这里的类型是int32_t&) (4)如果表达式是const或volatile(或两者都有),则去除const/volatile语义 (5)如果auto关键字带上&号,则不去除const语义 (6)如果表达式为数组,auto关键字推导类型为指针,如: int32_t a[3] = {}; auto arr = a; std::cout
(7)如果表达式为数组,且auto带上&,则推导出的类型为数组类型,如: int32_t a[3] = {}; auto& arr = a; std::cout
(8)函数或模板参数不能被声明为auto (9)auto不是一个真正的类型,仅仅是一个占位符,不能使用一些以类型为操作数的操作符,如sizeof或typeid std::cout
std::cout C++ auto 的使用 标签:air cout font 返回 ios ret namespace pre string 原文地址:https://www.cnblogs.com/xxxsans/p/12712769.htmlstd::vector<:>string> vec;
for (auto iter = vec.begin(); iter != vec.end(); ++iter) {}
string s = "fuck";
for (auto &i : s )
i = toupper(i); //改变成大写,影响s的值
cout//s的值是 FUCK
string s = "shit";
for (auto i : s )
i = toupper(i); //改变成大写,不影响s的值
cout//s的值是 shit
#include
int main(){
vectorint>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for(auto i : v){
cout" ";
}
coutendl;
return 0;
}
template