网站建设维护php,网上购物网站建设需求,室内装潢设计专业培训,网页设计图片刷新随机更换文章目录 [toc] 1.C11的新特性有哪些2.智能指针3.类型推导4.左值和右值5.nullptr6.范围for循环7.lambda表达式参考 1.C11的新特性有哪些
语法的改进 #xff08;1#xff09;统⼀的初始化⽅法 #xff08;2#xff09;成员变量默认初始化 #xff08;3#xff09;auto关… 文章目录 [toc] 1.C11的新特性有哪些2.智能指针3.类型推导4.左值和右值5.nullptr6.范围for循环7.lambda表达式参考
1.C11的新特性有哪些
语法的改进 1统⼀的初始化⽅法 2成员变量默认初始化 3auto关键字 允许编译器⾃动推断变量的类型减少类型声明的冗余。 4decltype 求表达式的类型 5智能指针 std::shared_ptr 和 std::unique_ptr 6空指针 nullptr: 提供了明确表示空指针的关键字替代了传统的 NULL 。 7基于范围的for循环: 简化遍历容器元素的语法 8右值引⽤和move语义 引⼊右值引⽤和移动构造函数允许⾼效地将资源从⼀个对象移动到另⼀个对 象提⾼性能。标准库扩充往STL⾥新加进⼀些模板类 9⽆序容器哈希表 ⽤法和功能同map⼀模⼀样区别在于哈希表的效率更⾼ 10正则表达式 可以认为正则表达式实质上是⼀个字符串该字符串描述了⼀种特定模式的字符串 11Lambda表达式 允许在代码中定义匿名函数 2.智能指针
–
3.类型推导
autoauto可以让编译器在编译期就推导出变量的类型 auto的使⽤必须⻢上初始化否则⽆法推导出类型auto在⼀⾏定义多个变量时各个变量的推导不能产⽣⼆义性否则编译失败auto不能⽤作函数参数在类中auto不能⽤作⾮静态成员变量auto不能定义数组可以定义指针auto⽆法推导出模板参数在不声明为引⽤或指针时auto会忽略等号右边的引⽤类型和cv限定在声明为引⽤或者指针时auto会保留等号右边的引⽤和cv属性 decltypedecltype则⽤于推导表达式类型这⾥只⽤于编译器分析表达式的类型表达式实际不会进⾏运算。 exp是表达式decltype(exp)和exp类型相同exp是函数调⽤decltype(exp)和函数返回值类型相同其它情况若exp是左值decltype(exp)是exp类型的左值引⽤ 4.左值和右值
左值指表达式结束后依然存在的持久对象。可以取地址可以通过内置不包含重载 来获取地址我们可以将一个右值赋给左值。右值表达式结束就不再存在的临时对象。不可取地址不可以通过内置不包含重载 来获取地址。由于右值不可取地址因此我们不能将任何值赋给右值。使用 进行赋值时 的左边必须为左值右值只能出现在 的右边。
// x 是左值666 为右值
int x 666; // ok
int *y x; // ok
int *z 666 // error
666 x; // error
int a 9; // a 为左值
int b 4; // b 为左值
int c a b // c 为左值 , a b 为右值
a b 42; // error5.nullptr
C11引⼊nullptr关键字来区分空指针和0。nullptr 的类型为 nullptr_t能够转换为任何指针或成员指针的类型也可以进⾏相等或不等的⽐较。NULL预处理变量是一个宏它的值是 0定义在头文件 中即 #define NULL 0。nullptrC 11 中的关键字是一种特殊类型的字面值可以被转换成任意其他类型。 6.范围for循环
for变量对象
std::vectorint arr(5, 100);
for (std::vectorint::iterator i arr.begin(); i ! arr.end(); i ) {std::cout *i std::endl;
}
// 范围for循环
for (auto i : arr) {std::cout i std::endl;
}7.lambda表达式
lambda表达式表示⼀个可调⽤的代码单元没有命名的内联函数不需要函数名因为我们直接⼀次性的⽤它不需要其他地⽅调⽤它。lambda表达式语法
[capture list] (parameter list) - return type {function body }
// [捕获列表] (参数列表) - 返回类型 {函数体 }
// 只有 [capture list] 捕获列表和 {function body } 函数体是必选的
auto lam []() - int { cout Hello, World!; return 88; };
auto ret lam();
coutretendl; // 输出88lambda 表达式的特点 变量捕获才是成就lambda卓越的秘⽅ [] 不捕获任何变量,这种情况下lambda表达式内部不能访问外部的变量[] 以引⽤⽅式捕获所有变量保证lambda执⾏时变量存在[] ⽤值的⽅式捕获所有变量创建时拷⻉修改对lambda内对象⽆影响)[, foo] 以引⽤捕获变俩个foo, 但其余变量都靠值捕获[, foo] 以值捕获foo, 但其余变量都靠引⽤捕获[bar] 以值⽅式捕获bar; 不捕获其它变量[this] 捕获所在类的this指针 lambda最⼤的⼀个优势是在使⽤STL中的算法(algorithms)库
参考
Leetcodec面试突破
代码随想录–最强八股文c