C++
DylanYeung
Android Hal工程师、算法爱好者、Camera底层搬砖工
展开
-
C++ istream_iterator的源码与使用方法分析
最近在看C++ STL的源码,看的主要是gnu2.9版本的源码。其中看到了istream_iterator的实现源码,源码如下:template <class T, class Distance = ptrdiff_t> class istream_iterator { friend bool operator== __STL_NULL_TMPL_ARGS (const istream_iterator<T, Distance>& x,原创 2020-08-19 13:42:49 · 1008 阅读 · 1 评论 -
Linux 下 C++ 遍历文件夹下的文件名
在C++中,我们一般学的时候都很少学到相关的文件夹方面的操作,相对来说,C++的文件夹操作也比较麻烦。而不像Python有OS模块,在操作文件夹方面简单易于上手。下面我们直接看一下,C++遍历文件夹的代码吧:#include <string>#include <dirent.h>#include <stdio.h>#include <...原创 2019-12-16 14:20:40 · 5401 阅读 · 1 评论 -
Fseek()与Ftell()函数的作用
Fseek()fseek函数功能是将文件指针移动到指定的地方,因此可以通过fseek重置文件指针的位置。函数原型:int fseek(FILE *stream, long offset, int origin);参数说明:stream : 待移动的FILE型指针变量offset:偏移量,每次移动多少个字节origin: 指针开始的位置返回值: 如果fseek (...原创 2019-12-11 15:59:04 · 6341 阅读 · 0 评论 -
C++ 多线程--STL库 总结版 (详细)
最近在看C++ STL库的多线程部分,基本上看完了,现在就来做一下总结吧。一、高级接口 1、多线程启动函数:std::async() 2、线程返回结果:std::future 3、共享变量:std::shared_future二、低级接口 1、多线程启动函数:Class std::thread ...原创 2019-11-05 14:42:18 · 5587 阅读 · 0 评论 -
Effective C++条款21:必须返回对象时,别妄想返回其reference
当我们在返回对象的时候,如果return by value就会造成析构函数和构造函数的构建成本。返回reference时,会有以下几个需要注意的问题。1、在这里既是一开始就返回引用,也会创建出一个对象,因为一开始就期待它存在一个Rational对象在调用operator*前就存在,所以此时调用reference还是会有构造和析构的成本Rational a(1,2);Rational...原创 2019-04-19 21:21:49 · 188 阅读 · 0 评论 -
Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value
条款20:宁以pass-by-reference-to-const替换pass-by-value以下考虑类对象:class Person{public: Person(); virtual ~Person(); //...private: std::string name; std::string address;};class S...原创 2019-04-09 19:18:57 · 182 阅读 · 0 评论 -
Effective C++条款18~19
条款18:让接口容易被正确使用,不易被误用请记住:1、好的接口很容易被正确使用,不容易被误用。应该在所有的接口中努力达成这些性质2、“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。3、”阻止误用“的方法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任4、tr1::shared_ptr支持定制型删除器。可以防范DLL问题,可被用来自动解除...原创 2019-04-01 15:38:33 · 177 阅读 · 0 评论 -
设计模式之一:模板方法 Template Method
在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期的实现需求? 模板方法模式定义:定义一个操...原创 2019-03-26 23:25:38 · 114 阅读 · 0 评论 -
Effective C++条款16~17
条款16:成对使用new和delete时要使用相同形式其实这一条款十分简单,只需要记住即可,没啥特别的点需要说的。在我们使用 new 创建对象时,就应该使用 delete 删除对象;在使用 new[] 创建对象时,应该对于地使用 delete[] 进行删除。在使用new时会做两件事: 1、内...原创 2019-03-18 21:42:05 · 146 阅读 · 0 评论 -
Effective C++条款14:在资源管理类中小心copying行为
在条款13中,我们有了“资源获得的时机便是初始化时机”的RAII概念,在实现上,我们很多时候会选择使用auto_ptr和tr1::sharec_ptr指针,但是很多时候我们会发现,这两个指针也不是万能的,很多时候我们应该构建自己的——“资源管理类”。所以,我们会构建出在构造函数中初始化,并在析构函数中自动删除的类。但是,这样就会有一个问题,面对拷贝构造,我们应该怎么办呢?面对这样...原创 2019-03-17 21:45:46 · 186 阅读 · 0 评论 -
Effective C++条款10~12
条款10:令operator=返回一个reference to *this这里的原因其实很好理解,一般来讲,我们都是通过重载‘=’来构建拷贝赋值函数。那没为什么一定要返回*this 的reference呢?因为我们可能赋值一般都会使用 obj1=obj2的形式,但是无法排除会有人使用你的类来构造这样的句子:obj1=obj2=obj3。说实话,我也不能理解为什么会有人想要这样做,但是实际情况...原创 2019-03-08 11:28:04 · 124 阅读 · 0 评论 -
error C1041: 无法打开程序数据库“xxx\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用/FS
今天在visual studio2015 community上写代码的时候遇到了这样一个error:error C1041: 无法打开程序数据库“xxx\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用/FS网络上找到的方法:解决方案:修改项目属性 右击项目 --> "属性”1. “C/C++” --> "常规” -->”调试信...原创 2019-03-16 14:01:17 · 10705 阅读 · 0 评论 -
Effective C++条款13:以对象管理资源
通常来讲,我们会使用new、delete来直接进行内存的管理。但是,由于很多原因,我们在这样使用的时候会造成内存的泄露。比如:1、程序员在编程的时候new了一个内存,但是在后面编程的时候忘了进行delete,这样就会造成内存泄漏。2、例如下列实例代码:void f() const{ Investment* pInv = creatInvestment(); if(...原创 2019-03-11 02:03:46 · 93 阅读 · 0 评论 -
Effective C++条款07:为多态基类声明virtual析构函数
显而易见,这个条款和多态的这个特性息息相关。多态的其中一个重要是通过我们在基类中的声明虚函数,子类进行重写(override)。那么在基类中,我们声明了虚函数或者纯虚函数,那么我们应该对应地就要有虚析构函数,但是往往我们会忽略这个问题,这就会导致严重的内存泄漏问题。下面我们上代码:class base //这里的基类并没有声明虚析构函数{ public: base() {...原创 2019-03-02 20:48:30 · 193 阅读 · 0 评论 -
C++类转换函数
用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数:...原创 2019-02-26 10:56:44 · 557 阅读 · 0 评论 -
Effective C++条款04:确定对象被使用前已先被初始化
条款04:确定对象被使用前已先被初始化在这一条款中,我们学到的最重要的一点就是,一定要在定义变量时进行初始化。因为读取未初始化的值会导致不明确的行为。其实,在这一条款中,我们应该注意到的是,初始化和赋值的区别。在对象的成员函数中,我们常常将赋值和初始化的行为混淆。初始化是发生在对象调用构造函数之前,在构造函数内对变量的操作都是赋值操作。其中,构造函数中进行初始化的方法也就是最重要的初始化列...原创 2019-02-26 00:27:18 · 165 阅读 · 0 评论 -
C++面向对象编程《2》--类和类之间的三大关系
复合(Composition)、委托(Delegation)、继承(Inheritance) 一、复合的形式:在A类中定义了一个B类的对象,然后A类的所有实现都通过B类的函数实现,类似于对B类成员函数的再次封装。具体的实例代码如下: 两者之间的关系: 二、委托:在A类中定义了一个指向B类的指针变量,A类中所需要的操作都在B类中进行声明和定义...原创 2019-02-24 21:45:33 · 383 阅读 · 0 评论 -
Effective C++条款03:尽可能地使用const
条款三:尽可能地使用const首先,我们需要知道const的作用:const是C++中的关键字,它允许我们指定一个语义的约束。const分为两种: 1、顶层const: 顶层const的语法位置处于指针的右边,其作用是表明该指针不可指向其他对象,即:指针的自身是一个常量。 eg:char *...原创 2019-02-23 17:31:19 · 192 阅读 · 0 评论 -
Effective C++条款05~06
条款05:了解C++默默编写并调用了哪些函数big three:拷贝构造函数 拷贝赋值函数operator= 析构函数当我们像下面编写一个类的时候:class Empty{public:private:};我们可能会觉得,这个类是空的,没有任何内容。但是,实际上,我们这种想法是错误的,当我们这样声明一个类时,我们会得到一些编译器为我们的类自动声明的函数。他们包括:...原创 2019-02-27 16:48:48 · 184 阅读 · 0 评论