美文网首页
[C++11阅读][3-2-1]auto类型推导(上)

[C++11阅读][3-2-1]auto类型推导(上)

作者: 凌霄阁2010 | 来源:发表于2020-06-21 00:02 被阅读0次

静态类型、动态类型

C/C++是静态类型语言,在编译时进行类型检查。
后来一些新兴的语言,比如Python、JavaScript、Perl,是动态类型语言,运行时才进行类型检查。
Python有个非常方便的特性,不用指定数据类型就能进行变量声明,比如这个打印hello world。

name = 'world\n'
print('hello, ' % name)

从技术上讲,“拿来就用”效果是用类型推导来实现的,而类型推导也可以用于静态语言,C++11就用auto关键字实现了这一效果。虽然与动态类型推导稍有区别,但已经大大提高易用性了。

auto关键字

C++98中已经有auto关键字了,写在变量类型之前,是一个存储类型指示符(如static、extern),语义是具有自动存储期的局部变量。现实情况这个关键字几乎没有人用,于是C++11中摇身一变,成为新的类型指示符(如float、int),语义是自动类型推导。

int main () {
    double foo();
    auto x = 1;
    auto y = foo();
    struct m { int i;} str;
    auto str1 = str;
    auto z;  // 编译失败
    z = x;
}
// error: declaration of ‘auto z’ has no initializer

值得注意的是,auto声明的变量必须被初始化,以使编译器能够从其初始化表达式中推导出其类型。上面例子中的z没有被初始化,哪怕下面进行赋值了,auto z那句还是会编译失败。

相关文章

网友评论

      本文标题:[C++11阅读][3-2-1]auto类型推导(上)

      本文链接:https://www.haomeiwen.com/subject/jfijxktx.html