Last Updated: 2023-12-26 11:12:26 Tuesday
-- TOC --
我们习惯了在申明变量类型,或者函数返回类型的时候,都显示地写出类型名称,比如int,char,unsigned long等等。。。在C++中,可以使用auto关键词来让编译器替我们干这个输入类型的活儿。
其实auto这个申明一直都存在,在C++11之前,包括C语言,它都表示这个变量是一个automatic variable,即由编译期在stack中创建的变量。但是实际上,auto申明几乎用不到,函数内部定义的变量,都是automatic的!从C++11开始,关键词auto焕发新生...
C++中的auto,不是自动类型,而是让编译器自动把类型通过上下文推导出来,auto is not a type!
比如:
int x = 42;
auto y = 42; // 42 is int, so y is int
编译器一看是42,这是int类型,于是就自动地给y设置为int类型的对象。
再比如:
auto the_answer { 42 }; // int
auto foot { 12L }; // long
auto rootbeer { 5.0F }; // float
auto cheeseburger { 10.0 }; // double
auto politifact_claims { false }; // bool
auto cheese { "string" }; // const char*
auto可以节省很多typing的工作,特别是在使用stdlib中的containers的时候。
Alone, all of this simple initialization help doesn’t buy you much; however, when types become more complicated—for example, dealing with iterators from stdlib containers—it really saves quite a bit of typing. It also makes your code more resilient to refactoring.
auto让代码变得简单(一看到auto,就知道这里的type没问题,编译器搞定),还可以减少代码重构时的修改工作量。
The auto keyword assists in making code simpler and more resilient to refactoring.
看一下这段测试代码,使用了C++的range-based for loop:
$ cat test_for.cpp
#include <cstdio>
struct abc {
int a;
int b;
};
void change(abc& g) {
g.a = 1;
g.b = 5;
}
int main(void) {
abc a[4];
for (auto &i: a) {
change(i);
printf("%d %d\n", i.a, i.b);
}
return 0;
}
$ g++ -Wall -Wextra test_for.cpp -o test_for
$ ./test_for
1 5
1 5
1 5
1 5
假设类型名称发生变化,至少在for循环这部分,不需要做任何修改。
本文链接:https://cs.pynote.net/sf/c/cpp/202208192/
-- EOF --
-- MORE --