静态类型、动态类型
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那句还是会编译失败。
网友评论