本文共 1794 字,大约阅读时间需要 5 分钟。
auto关键字
1.概念::auto不再是一个存储类型指示符,而是作为一个新的类型指 示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得. 注意:auto是一个根据给的数据确定类型的符号,可以说他不是一种"类型"的申明符,它更像是一个占位符,占着位置,给句位置上的数据给类型的符号,所以一定要初始化.int TestAuto() { return 10; } int main() { int a = 10; auto b = a; auto c = 'a'; auto d = TestAuto(); cout << typeid(b).name() << endl; cout << typeid(c).name() << endl; cout << typeid(d).name() << endl; //auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化 return 0; }
2.使用细则
(1) auto与指针和引用结合起来使用 用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加& (2)在同一行定义多个变量 当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个 类型进行推导,然后用推导出来的类型定义其他变量。3.不可以使用的场景
(1)不能作为函数的参数 (2)不能直接用来申明数组 (3) auto不能定义类的非静态成员变量 (4)实例化模板时不能使用auto作为模板参数基于范围的for循环
1.概念 对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引 入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二 部分则表示被迭代的范围 例如:void TestFor() { int array[] = { 1, 2, 3, 4, 5 };for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i) array[i] *= 2;for (int* p = array;p < array + sizeof(array)/ sizeof(array[0]); ++p) cout << *p << endl; }
void TestFor() { int array[] = { 1, 2, 3, 4, 5 }; for(auto& e : array) e *= 2; for(auto e : array) cout << e << " "; return 0; }
2.使用条件
(1)循环范围必须是确定的 (2)迭代的对象要实现++和==的操作。指针空值
1.概念 NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何种定义,在 使用空值的指针时,都不可避免的会遇到一些麻烦 .2 nullptr 与 nullptr_t 为了考虑兼容性,C++11并没有消除常量0的二义性,C++11给出了全新的nullptr表示空值指针。C++11为什么 不在NULL的基础上进行扩展,这是因为NULL以前就是一个宏,而且不同的编译器厂商对于NULL的实现可能 不太相同,而且直接扩展NULL,可能会影响以前旧的程序。因此:为了避免混淆,C++11提供了nullptr, 即:nullptr代表一个指针空值常量。nullptr是有类型的,其类型为nullptr_t,仅仅可以被隐式转化为指针类 型,nullptr_t被定义在头文件中: typedef decltype(nullptr) nullptr_t;注意:
转载地址:http://fkrgn.baihongyu.com/