c++11/14
文章平均质量分 74
主要记录c++11/14相关知识点
C咖咖
历史不会简单的重复,但历史会惊人的相似
展开
-
C++11 external template
C++11 外部模板转载 2024-03-05 17:56:09 · 62 阅读 · 0 评论 -
C++构造函数列表初始化的优点
C++构造函数列表初始化的优点原创 2023-12-13 15:32:08 · 176 阅读 · 0 评论 -
两个没有排序的vector求是否有交集
#include <iostream> // std::cout#include <algorithm> // std::find_if#include <vector> // std::vectorauto test(const std::vector<int>& va, const std::vector<int>& vb)//auto test(const std::vector<in...原创 2020-09-30 13:33:04 · 575 阅读 · 0 评论 -
c++11/14之std::shared_ptr作为引用参数,普通参数
1. c++中使用std::shared_ptr类型做为构造函数参数,并使用std::move()初始化成员变量。使用std::shared_ptr类型作为形参,shared_ptr会被复制,使用std::move()之后,形参对象就没有内容了。#include <iostream>#include <utility>#include <memory&g...原创 2019-10-30 15:36:51 · 12228 阅读 · 2 评论 -
const iterator与const_iterator的区别
const iterator相当于指针常量。即,指针本身为常量,指针自身不可修改,不能指向其他的元素,但指向内容可修改。 const_iterator相当于常量指针。即,指针指向的内容为常量,指针本身可修改,指向其他的元素,但指向内容不可修改。举例如下:#include <iostream>#include <vector>int main(){ std::vector<int> v{1,3,5,7,9}; const std::vector<原创 2020-06-04 13:18:47 · 548 阅读 · 1 评论 -
std::tie在struct中的用法
#include <iostream>#include <string>#include <map>#include <tuple>using namespace std;struct Test{ int id; std::string name; std::map<int, std::string> address; float wage; auto tie() const {return std::tie(id,.原创 2020-05-09 15:05:40 · 413 阅读 · 0 评论 -
C++类成员指针
类成员指针类成员指针是指可以指向类的非静态成员的指针。成员指针指向的是类的成员。类的静态成员不属于任何对象,因此无须特殊的静态成员的指针,指向静态成员的指针和普通函数指针没有什么区别。当初始化一个类成员指针时,令其指向类的某个成员,但是不指定该成员所属的对象,直到使用成员指针时,才提供成员所属的对象。数据成员指针类成员指针的使用*表示当前声明的名字是一个指针,但是在*之前必须添加cla...原创 2019-12-25 11:20:21 · 672 阅读 · 0 评论 -
C++ Most vexing parse(C++最头疼的解析)
首先需要了解,在C++中,如下三种方式声明了同一个函数:int f(double d); //声明接受一个double参数d,返回值为int类型的函数 int f(double (d));//效果一样,参数名外的括号会被忽略 int f(double);//直接省略参数名 同样地,如下三种方法也声明了同一个函数:int g(double (*pf)()); //声明返回值为...原创 2019-12-24 15:58:08 · 2226 阅读 · 0 评论 -
C++之constexpr详解
constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:constexpr int mf = 20; //20是常量表达式constexpr int limit = mf + 1; // mf + 1是常量表达式constexpr int sz = size(); //之后当siz...原创 2019-12-14 20:34:04 · 83892 阅读 · 2 评论 -
C++之namespace详解
1.namespace基本用途2.匿名的namespace用途3.内嵌namespace4.inline namespace原创 2019-12-12 20:23:13 · 196 阅读 · 0 评论 -
C++之using类型别名和typedef详解
1. typedef基本使用2.using基本使用3.using的好处4.c++11和c+14中对typedef和using的使用原创 2019-12-12 20:22:03 · 370 阅读 · 0 评论 -
C++之异常处理
1. 异常基本用法2.异常和函数调用区别3. noexcept4. c++17 noexcept原创 2019-12-12 20:20:30 · 151 阅读 · 1 评论 -
C++之lambda表达式详解
1. lambda基本语法2. lambda的使用(cosnt属性)3.lambda的陷阱原创 2019-12-12 20:17:50 · 161 阅读 · 0 评论 -
C++之右值详解
1. 右值概念2.右值的使用3. std::mvoe,std::forward,auto&&原创 2019-12-12 20:15:48 · 233 阅读 · 0 评论 -
C++之virtual关键字详解
1. virtual函数2. virtual 继承3. virtual对引用的影响4.virtual对dynamic_cast的影响5.virtual--->c++模型原创 2019-12-12 20:13:59 · 262 阅读 · 0 评论 -
C++之特殊函数
1. 构造函数2.析构函数(virtual, noexcept,pure virtual)3.拷贝构造函数4.拷贝赋值运算符5.移动构造函数6.移动赋值运算符7.委托构造函数原创 2019-12-12 20:09:00 · 216 阅读 · 0 评论 -
std::enable_shared_from_this
std::enable_shared_from_this是一个模板类, 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt 共享对象 t 的所有权。若一个类 T 继承 std::enable_shared_from_this<T...原创 2018-10-16 16:49:28 · 792 阅读 · 1 评论 -
RVO V.S. std::move
ReturnValueOptimizationReturn value optimization, simply RVO, is a compiler optimization technique that allows the compiler to construct the return value of a function at the call site. The techni...转载 2019-08-29 20:47:21 · 237 阅读 · 0 评论 -
C++之using关键字语法属性用法详解
在类定义中using 声明将基类成员引入到派生类的定义中,例如将基类的受保护成员暴露为派生类的公开成员。此情况下嵌套名说明符必须指名所定义的类的某个基类。若其名字是该基类的某个重载的成员函数的名字,则具有该名字的所有基类成员函数均被引入。若派生类已有具有相同名字、形参列表和限定的成员,则派生类成员隐藏或覆盖从基类引入的成员(不与之冲突)。例1:#include <iostr...原创 2019-09-16 16:28:57 · 438 阅读 · 0 评论 -
C++之const关键字详解
const变量它的值不能被改变,只读的变量。const对象一旦创建后其值就不能再改变,所以const对象必须初始化。初始值可以是任意复杂的表达式:const int bufSize = get_size(); //正确:运行时初始化const int size = 42; //正确:运行时初始化const int size; ...原创 2019-09-17 05:48:31 · 3093 阅读 · 2 评论 -
c++之自动生成特殊成员函数
1. 构造函数2.析构函数3.拷贝构造函数4.赋值构造运算符5.移动构造函数6.移动赋值运算符原创 2019-09-22 12:32:31 · 175 阅读 · 0 评论 -
c++11之override和final
管理虚方法:override和final传统的虚函数是为了实现多态调用,但这必须是派生类与基类的虚函数签名完全一致的情况下才会发生多态,如果不一致,假设如下: 1 class Base 2 { 3 public: 4 virtual void Fn(){ cout "Base::Fn()" endl; } 5 }; 6 7 class Derived :原创 2017-06-26 19:02:54 · 391 阅读 · 0 评论 -
数组引用
1. 数组引用既可以作为参数传递,又可以当做 函数返回值。在这先举个例子,通过模板传入的类型和数组大小可以变的。其他一些关注数组引用的介绍后续再补。例1:#include <iostream>template<typename T, int N>//auto getArrayRef(T(&arr)[N])->T(&)[N] //C+...原创 2019-08-27 21:02:31 · 2594 阅读 · 0 评论 -
c++外部模板
在C++98/03语言标准中,对于源代码中出现的每一处模板实例化,编译器都需要去做实例化的工作;而在链接时,链接器还需要移除重复的实例化代码。显然,让编译器每次都去进行重复的实例化工作显然是不必要的,并且连接器也因此受累。在现实编码世界里,一个软件的实现可能会在很多代码块中使用同一种类型去实例化同一个模板。此时,如果能够让编译器避免此类重复的实例化工作,那么可以大大提供编译器的工作效率。因此,人...转载 2019-08-22 13:53:35 · 371 阅读 · 0 评论 -
C++11之initialization_list
转自http://blog.csdn.net/hailong0715/article/details/54018002在我们实际编程中,我们经常会碰到变量初始化的问题,对于不同的变量初始化的手段多种多样,比如说对于一个数组我们可以使用 int arr[] = {1,2,3}的方式初始化,又比如对于一个简单的结构体:[cpp] view plain copy转载 2017-11-24 13:32:38 · 4662 阅读 · 0 评论 -
C++/C++11中命名空间(namespace)的使用
转自: 大型程序往往会使用多个独立开发的库,这些库又会定义大量的全局名字,如类、函数和模板等。当应用程序用到多个供应商提供的库时,不可避免地会发生某些名字相互冲突的情况。多个库将名字放置在全局命名空间中将引发命名空间污染(namespace pollution)。传统上,程序员通过将其定义的全局实体名字设得很长来避免命名空间污染问题,这样的名字中通常包含表示名字所属库的转载 2017-12-02 17:11:16 · 1538 阅读 · 0 评论 -
c++14
转自:https://zh.wikipedia.org/wiki/C%2B%2B14C++14是C++的现行标准的非正式名称,正式名称为"International Standard ISO/IEC 14882:2014(E) Programming Language C++"。c++14旨在作为C++11的一个小扩展,主要提供漏洞修复和小的改进。C++14标准的委员会草案转载 2017-09-04 16:37:35 · 765 阅读 · 0 评论 -
c++11学习
http://www.cnblogs.com/haippy/archive/2013/08/27/3284540.html转载 2017-07-21 10:07:08 · 192 阅读 · 0 评论 -
c++之顶层const和底层const的区别
使得被修饰的变量本身无法改变的const是顶层const,其他的通过指针或引用等间接途径来限制目标内容不可变的const是底层const顶层const表示修饰的对象本身是一个常量,如const int a=10(a是一个常量);int *const ptr(指针ptr本身是一个常量)。如果对象本身不是常量,则就是底层const。顶层=对象本身被定义为常量。原创 2017-07-17 15:50:44 · 293 阅读 · 0 评论 -
c++11之default和delete
假设你为类定义了构造函数,那么类就不会自动提供默认的构造函数了,然而,如果你仍然想使用类提供的默认版本,那么可以使用default关键字:class Some{public: Some(Some&&); Some() = default; // use default constructor ...}; 相反原创 2017-06-26 19:00:41 · 985 阅读 · 0 评论 -
c++11之using
模板别名:using =C++中创建别名一般用typedef,如:typedef std::vector::iterator itType;还可以这样做:using itType = std::vector::iterator; 二者的差别在于,using可以使模板具体化,如:using arr = std::array12>;,此时type原创 2017-06-26 18:58:14 · 210 阅读 · 0 评论 -
c++11之initializer_list
std::initializer_list可以作为函数参数,如果一个类中的构造函数使用了这种方法,则其他函数将不能再使用其作为参数,这是为了防止调用二义性。原创 2017-06-26 18:56:07 · 303 阅读 · 0 评论 -
c++11之forward_list
std::forward_list是在C++11中引入的单向链表或叫正向列表。forward_list具有插入、删除表项速度快、消耗内存空间少的特点,但只能向前遍历。与其它序列容器(array、vector、deque)相比,forward_list在容器内任意位置的成员的插入、提取(extracting)、移动、删除操作的速度更快,因此被广泛用于排序算法。forward_list是一个允许在序列转载 2017-07-05 10:15:56 · 951 阅读 · 0 评论 -
c++11 shared_ptr陷进
转自:http://blog.sina.com.cn/s/blog_62b4e3ff0100v1tc.html条款1:不要把一个原生指针给多个shared_ptr管理int* ptr = new int;shared_ptr p1(ptr);shared_ptr p2(ptr); //logic errorptr对象被删除了2次这种问题比喻成“二龙治水”,在原生指针转载 2018-01-29 14:07:04 · 695 阅读 · 0 评论 -
C++11::遍历tuple中的元素
转自:https://blog.csdn.net/lanchunhui/article/details/49868077在设计tuple的遍历程序之前,我们不妨先进行std::pair的打印工作:// #include <utility>cout << make_pair("InsideZhang", 23) << end; ...转载 2018-09-13 16:06:21 · 4054 阅读 · 2 评论 -
c++11函数模板的默认模板参数 和 可变参数模板函数
转自:https://www.cnblogs.com/lsgxeva/p/7787500.html#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#include <vector>#include <map>// C++11之前,类模板是支持默认的...原创 2018-09-14 11:18:08 · 1579 阅读 · 0 评论 -
C++11 右值引用和转移语义
新特性的目的右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面:消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。 能够更简洁明确地定义泛型函数。左值与右值的定义...转载 2019-08-08 14:21:30 · 192 阅读 · 1 评论 -
C++11异常处理 noexcept
转自https://blog.csdn.net/zkreats/article/details/505507861.简介在C语言中,如果程序的运行出现异常、错误,我们想提供方案处理这些异常时,我们面临许多问题,如:(1)C语言没有提供统一(标准)的方式来处理错误;(2)无法保证错误会被正确的处理;(3)错误的传播无法控制,特别是在函数的嵌套调用时;… …当程序在运行时发...转载 2019-04-15 16:41:07 · 377 阅读 · 0 评论 -
如何使用std::mem_fn (since C++11)
转自https://blog.csdn.net/elloop/article/details/50375820前言本文总结了STL中函数适配器:mem_fn系列函数的用法,它们是:mem_fun (c++98), mem_fun_ref (c++98), mem_fn (c++11). 文中给出了它们各自的使用范围及代码示例,提到了mem_fn的使用限制,使用bind来解决这个限制。基本...转载 2019-02-13 15:43:33 · 1507 阅读 · 0 评论 -
C++智能指针 shared_ptr
转自https://www.cnblogs.com/diysoul/p/5930361.html shared_ptr 是一个标准的共享所有权的智能指针, 允许多个指针指向同一个对象. 定义在 memory 文件中(非memory.h), 命名空间为 std. shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性(auto_ptr 是独占的), 在使用引用计数的机...转载 2019-02-13 13:42:03 · 1418 阅读 · 0 评论