现代C++
文章平均质量分 76
C++11以后
#A#
专注c++领域
c++开发&c++逆向选手
展开
-
C++17
使static_assert的文本信息可选static_assert(sizeof(void*)==4, “64 - bit not supported”);//C++11引入,无需被调用 编译器报错assert(sizeof(b)==sizeof(a));//运行期间 必须被调用删除trigraphs#\^[]{}|~每个字符用其他三个字符代替 比如??=嵌套命名空间的定义namespace X::Y{ ... }代替namespace X{ namespace Y{ ... } }原创 2022-05-18 02:31:02 · 335 阅读 · 0 评论 -
C++14标准
lambda的参数可以使用autoint ret = [](int input){return input* input;}{10}; //C++11auto func = [](auto input){return input*input;};cout<<func(11)<<' '<<func(3.14)<<endl;constexpr支持if switch和循环...constexpr函数是一种编译期和运行期都能被调用执行的函数。用一套代原创 2022-05-18 01:44:20 · 315 阅读 · 0 评论 -
C++11 杂项
列表初始化C++11中为了同一初始化方式,提出了列表初始化的概念在C++11中初始化列表可以作用于任何类型对象的初始化struct Point { int x; int y; }a = {1,2}; int b{ 3 }; int c = { 3 }; int* d = new int{ 3 }; double b = double{ 12.12 }; int* arr = new int[] {1, 2, 3}; std::map<int, int>map_原创 2022-05-11 05:42:19 · 214 阅读 · 0 评论 -
std::function类模板
可调用实体和仿函数可调用实体(callable target),C++中包含了几种可调用对象:函数,函数指针,lambda表达式,std::bind创建的对象,以及实现了()操作符的类(仿函数类)仿函数(functor)又称为函数对象(function object)是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样(函数无状态,仿函数可有状态),作为仿函数的类,必须实现operator()运算符。struct functor{ int operator()(int a,原创 2022-05-10 02:40:06 · 894 阅读 · 0 评论 -
C++11:Lambda
C++11开始支持lambda(匿名函数或闭包):函数A中的匿名函数,可以直接访问(不需要传参)函数A的上下文环境才可见的变量(比如局部变量)Lambda的结构: [捕获列表](参数列表)(修饰符)->返回类型{匿名函数体};捕获列表:捕获调用者上下文环境的需要访问的变量,可按值捕获或按引用捕获lambda函数代码的可读性更好,尤其是对于小函数,不会污染任何名字的空间(本身就没名字)目的:就地书写,就地使用,...原创 2022-05-10 01:37:10 · 284 阅读 · 0 评论 -
STL容器改进
forward_liststd::forward_list是C++11中引入的单向链表或叫正向链表。foeward_list具有插入、删除速度快、消耗内存空间少的特点,但只能向前遍历。与其他序列容器(vector deque等)相比,forward_list允许在序列的任何一处位置以O1的方式插入或删除元素。forward_list可以看作是对C语言风格的单链表的封装,仅提供有限的接口,和C中它的实现相比,基本不会有任何开销,当不需要双向迭代的时候,与std::list相比,该容器具有更高的空间利用率.原创 2022-05-03 03:24:00 · 299 阅读 · 0 评论 -
C++11对类定义的改进
=default,=deletedefault显示声明该函数自动生成函数体,即默认函数,仅适用于类的特殊成员函数delete 禁用该函数,比如若不想使用默认的拷贝函数或赋值函数,可以使用delete一旦基类中使用=delete 来声明基类的某个成员函数为删除的,那么派生类中的对应函数也会自动的变成删除的就可以用delete来禁用函数而不是private因为就可以保证在同一个类也不能调用这些方法 如果用private 就会在链接的时候报错如果要把private的改成= delete的 就.原创 2022-04-30 01:21:41 · 870 阅读 · 0 评论 -
C++11:智能指针
智能指针:是指用于存储和封装指针的类,被存储的指针指向了从堆上动态分配的对象,能够在适当的时间自动删除指向的对象。智能指针在面对异常的时候能确保正确的销毁动态分配的对象。也可以用于跟踪被多用户共享的动态分配对象 使用operator-> 和 operator* 来生成原始指针,看上去就像一个普通指针auto_ptr<T> ptr(new T);*ptrptr->value 不用手动delete实现一个最简单的智能指针:template<typename T..原创 2022-04-29 00:51:43 · 2556 阅读 · 0 评论 -
C++11:类型推断
auto&decltypeC++98:auto int a = 10;//自动变量(相对于static, register,extern,可以省略) //新标准废弃这种用法C++11:int a = 10;auto 仅仅是一个占位符,并不是一个真正的类型。根据初始化的值推断变量的类型auto的作用1.代替较长的声明std::vector<std::string>strary;for(std::vector<std::str...原创 2022-04-28 23:43:51 · 1457 阅读 · 0 评论 -
C++11:移动语义
一个带指针的类拷贝构造函数没使用深拷贝,浅拷贝会导致野指针的问题直接指向析构的一块区域导致出问题 用深拷贝解决这个问题:(必须传引用)如果我们实现拷贝构造函数的时候,不传引用传值,会引起拷贝的死循环,拷贝的时候会把我们的对象传给拷贝构造函数,因为会生成一个临时对象,又会把实参拷贝给这个临时对象,这个过程又会重复调用拷贝构造函数,就会导致死循环A getA(){ A a; return a;}A x = getA();拿到getA的返回值的时候...原创 2022-04-28 04:45:39 · 153 阅读 · 0 评论 -
C++11:右值
在template的声明式中,class和typename没区别但如果要在模板参数内部,要typename定义嵌套从属类型的时候 就要typename指定从属类型比如模板函数里面还有一个类型比如 T::const_iterator* x;如果没用typename的话就可能会被编译器识别为静态成员,就会有二义性,为了让这个T::const_iterator成为T中的一个类型,而不是静态成员就要直接在前面加个typename:template<typename T>void Func(原创 2022-04-28 03:31:18 · 376 阅读 · 0 评论