C++
班公湖里洗过脚
上马击狂胡,下马草军书
展开
-
虚基类转换为派生类的问题
http://biancheng.dnbcw.info/c/289331.html看到一个虚函数相关的题目,现在分享下自己的思考。#include using namespace std;class base{public:virtual void funb1(){cout }转载 2016-09-01 14:26:41 · 797 阅读 · 0 评论 -
C++编译器编译时产生的默认函数
一个空类,经过C++编译器编译后会产生一些默认的函数,那具体有哪些函数呢,根据资料显示有6个,分别为默认构造函数,拷贝构造函数,析构函数,赋值运算符取址运算符,取地运算符(const版本)。使用时的调用如下:#ifndef CTEST_HH_#define CTEST_HH_#include <iosfwd>class CTest{public: CTest(); //默认构造函数 ~CTest(); //析构函数 CTest(const C...原创 2020-08-01 08:02:34 · 528 阅读 · 0 评论 -
VS2019使用strcpy报安全错误处理方案
使用VS2019编译C++程序时,使用strcpy函数,编译时报严重性 代码 说明 项目 文件 行 禁止显示状态错误 C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details...原创 2020-08-01 07:59:13 · 15747 阅读 · 2 评论 -
C++四种类型转换使用示例
C风格的强制类型转换很简单,均用Type b = (Type)a形式转换,C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用,例如:转换类型操作符 作用const_cast 去掉类型的const或volatile属性static_cast 无条件转换,静态类型转换dynamic_cast 有条件转换,动态类型转换,运行时检查类型安全(转原创 2020-07-10 20:21:21 · 534 阅读 · 0 评论 -
C++11 bind函数
bind函数可以看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适用”原对象的参数列表调用bind的一般形式:auto newCallObject = bind(callObject, arg_list);其中,newCallObject本是是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callObject的参数,即当我们调用newCallObject时,newCallObject会调用callObject,并将arg_list中的参数传给callO原创 2020-07-10 20:00:08 · 225 阅读 · 0 评论 -
C++ std::move的使用和使用
在C++11中,标准库在<utility>中提供了一个有用的函数std::move,std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。在对象拷贝的时候,在运行时,它们不会产生一行代码,可以减少资源创建和释放。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue);1.左值和右值的区别int a = 0; // a是左值,.原创 2020-06-14 10:54:01 · 937 阅读 · 0 评论 -
lambda表达式初探
lambda表达式定义[捕获列表] (参数列表) 返回类型 {函数体}[capture list](parameter list)->return type {function body}其中,捕获列表是一个lambda所在函数中定义的局部变量的列表(通常为空);return type,parameter list和function body与任何普通函数一样,分别表示返回类型,参数列表和函数体。但是,与普通函数不同,lambda必须使用尾置返回来指定返回类型。...原创 2020-06-03 10:10:24 · 189 阅读 · 0 评论 -
使用类成员函数作为回调函数示例
回调函数在不同模块的交互过程中使用非常广泛,比如说,B模块想获取A可以模块的进度,就可以使用回调函数来回调进度,但在使用的过程中,发现回调用不能直接使用类的成员函数,因此必须中转一下,来调用类的成员函数,具体代码如下//CGenerateFile.h//声明回调进度的函数typedef void (*callbackProgress)(double, void *); //void...原创 2020-03-28 11:07:38 · 745 阅读 · 0 评论 -
C++ const用法 尽可能使用const
开发环境: window10, QT5.13.1C++const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。1.const 修饰成员变量#include <iostream>using namespace std;int main(...原创 2020-03-25 11:36:20 · 365 阅读 · 0 评论 -
C++回调函数跨模块
#ifndef CONTROLLER_H#define CONTROLLER_H//// 文件名:Controller.h// 工程名:CppCallback// 开发环境:MacOS 10.13.1 Qt5.9.1// 简介:回调函数使用// 创建日期:Created by chenyijun on 2018/03/18.// 版权:Copyright © 2...原创 2018-03-18 23:43:11 · 1247 阅读 · 0 评论 -
C++ 类(多继承和虚继承)
文章概述 多继承的定义以及多继承的语法; 虚继承;多继承的定义以及多继承的语法a. 一个类有多个基类,这样的继承关系称为多继承;b. 多继承声明语法:class 派生类名: 访问控制符 基类名1,访问控制符 基类名2{数据成员和成员函数声明;}class A: public B,public c{} 1 2 3图示:这里...转载 2019-08-09 14:43:32 · 154 阅读 · 0 评论 -
C++ 虚继承实现原理(虚基类表指针与虚基类表)
虚继承和虚函数是完全无相关的两个概念。虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚继承可以解决...转载 2019-08-09 14:41:50 · 544 阅读 · 0 评论 -
[C++基础]对象内存分布--虚继承
virtual在C++中最大的功能就是声明虚函数和虚基类。虚拟继承是为了解决多重继承下公共基类的多份拷贝问题。虚继承虚继承解决了菱形继承中对派生类拥有多个间接父类实例的情况。虚继承的派生类的内存布局与普通继承很多不同,主要体现在: 虚继承的子类,如果本身定义了新的虚函数,则编译器为其生成一个虚函数指针(vptr)以及一张虚函数表。该vptr位于对象内存最前面。vs非虚继承:直接扩展...转载 2019-08-09 14:36:25 · 298 阅读 · 0 评论 -
C++中的内存管理
https://blog.csdn.net/lvquanye9483/article/details/82082618C++的内存分配方式在了解C++内存池之前我们要先了解C++是如何对内存进行分配的。我们知道C++的内存存储区分为5个,分别是 静态存储区:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,...转载 2019-03-09 09:44:40 · 262 阅读 · 0 评论 -
C++ 工程实践(4):二进制兼容性
https://blog.csdn.net/Solstice/article/details/6233478本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主...转载 2019-02-23 14:10:20 · 393 阅读 · 0 评论 -
C++ 工程实践(5):避免使用虚函数作为库的接口
https://blog.csdn.net/solstice/article/details/6244905摘要:作为 C++ 动态库的作者,应当避免使用虚函数作为库的接口。这么做会给保持二进制兼容性带来很大麻烦,不得不增加很多不必要的 interfaces,最终重蹈 COM 的覆辙。本文主要讨论 Linux x86 平台,会继续举 Windows/COM 作为反面教材。本文是上一篇《...转载 2019-02-23 14:08:01 · 657 阅读 · 0 评论 -
C++(static使用注意,和非static区别)
在C++中有静态成员变量和静态成员函数,要注意,在C++类和对象的概念中,先有类,才有对象。因为static型的成员函数和成员变量是在类产生的时候分配的内存,产生于对象之前,静态成员函数和成员变量属于类,不属于对象,所以不能在static型函数中调用普通的成员变量和成同函数。同时,在static型函数后面也不能加const,这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调原创 2018-08-22 09:37:00 · 2386 阅读 · 0 评论 -
C++ 回调函数理解
http://blog.csdn.net/clirus/article/details/50350519编程中肯定会遇到在C++中使用回调函数的情况。但是为什么要使用回调函数呢?我们需要理解回调函数设计原理因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。如果想知道回调函数在实际中有什么作用,先假设...转载 2018-03-14 00:02:26 · 377 阅读 · 0 评论 -
什么时候不应当使用虚函数
http://blog.csdn.net/yucan1001/article/details/6929073http://blog.sina.com.cn/s/blog_51409e8f01009jqg.html虚函数并不总是适用,所以C++中默认方法为非虚函数,原因有三: 1.虚函数有时会带来很大的开销 2.如果没有继承关系,那么函数是否为虚函数根本无关紧要,转载 2017-12-13 11:31:07 · 897 阅读 · 0 评论 -
C++处理异常 try,catch,throw
http://blog.csdn.net/tgzjz/article/details/45168057内容导读:本文包括2个大的异常实现概念:C++的标准异常和SHE异常。C++标准异常:也许我们了解过他,但你有考虑过,其实你根本不会使用,你不相信,那我问你:垃圾回收在C++中怎么实现?其实不需要实现,C++已经有了,但是你不会用,那么从开始看把。也许很高兴看到错误之后的H转载 2017-05-24 19:37:01 · 2376 阅读 · 0 评论 -
C++ 如何获取目录下面的文件/文件的创建时间
http://www.cnblogs.com/king_astar/archive/2009/09/27/1575107.html我手上有一个C++程序会生成一些临时文件,过期以后希望能够删除. 到达成这个目的,我需要做到:根据提供的路径,列取所有文件,并比较现在时间跟其创建时间的差,如果超过N天,则删除.问题分解开来是:1. 取得某个目录下面所有文件转载 2016-09-09 10:35:24 · 5912 阅读 · 0 评论 -
C/C++ 获取目录下的文件列表信息
http://www.cnblogs.com/xudong-bupt/p/3566574.html在C/C++编程时,需要获取目录下面的文件列表信息。1.数据结构struct dirent{ long d_ino; /* inode number 索引节点号 */ off_t d_off; /转载 2016-09-09 10:28:54 · 2027 阅读 · 0 评论 -
每天学点C++知识:用 ++i 替代 i++
http://blog.jobbole.com/97058/本文由 伯乐在线 - JingerJoe 翻译,黄小非 校稿。未经许可,禁止转载!英文出处:cpphints。欢迎加入翻译组。静态代码分析工具可简化编码过程,检测出错误并帮助修复。PVS-Studio 是一个用于 C/C++ 的静态代码分析工具。该团队检测了 200 多个 C/C++ 开源项目,包括了 Unreal Engin转载 2016-01-25 19:53:16 · 578 阅读 · 0 评论 -
C++ typedef用法小结
C++ typedef用法小结 (※不能不看※)转载 2015-10-09 10:44:31 · 367 阅读 · 0 评论 -
C /C ++ 回调函数
C /C ++ 回调函数转载 2015-10-09 10:19:35 · 1042 阅读 · 0 评论 -
sizeof()解析
sizeof()解析转载 2016-02-23 11:18:15 · 597 阅读 · 0 评论 -
关于C++ const 的全面总结
http://blog.csdn.net/Eric_Jo/article/details/4138548C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Co转载 2017-06-07 20:30:44 · 294 阅读 · 0 评论 -
const用法汇总
#include using namespace std;void ValueConst(const int var){ //var = 10; //错误 var是常量,不能改var的值; cout << "var==============" << var << endl;}//void PointerContentConst(const int* var)原创 2017-06-07 20:31:39 · 272 阅读 · 0 评论 -
几种C++ std::string和std::wstring相互转换的转换方法
几种C++ std::string和std::wstring相互转换的转换方法转载 2015-10-12 09:13:08 · 1538 阅读 · 0 评论 -
wstring(utf16)转string(utf8)
wstring(utf16)转string(utf8)转载 2015-09-17 20:02:25 · 1164 阅读 · 0 评论 -
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for CCheckBoxHeaderView", referenced from:MfEventNotifyView::SetTable_Rough() in mfeventnotifyview.oNOTE: a missing vtable usually means the first non-inline virtual member function has no原创 2015-09-08 18:03:35 · 3309 阅读 · 0 评论 -
__stdcall,__cdecl,__pascal,__fastcall的区别
http://c.biancheng.net/cpp/html/2847.html__cdecl__cdecl 是 C Declaration 的缩写,表示 C 语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。__stdca转载 2017-03-15 09:30:28 · 400 阅读 · 0 评论 -
C&&C++ 经典书籍
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-listhttp://bestcbooks.com/recommended-cpp-books/原创 2016-03-26 09:45:23 · 634 阅读 · 1 评论 -
C++虚继承的内存模型
http://blog.csdn.net/a627088424/article/details/47999757#comments[cpp] view plain copy#include using namespace std; class ZooAnimal { public: virtua转载 2017-12-21 15:01:30 · 1519 阅读 · 0 评论 -
C/C++中const关键字详解
https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const转载 2017-12-21 15:06:49 · 538 阅读 · 0 评论 -
编译防火墙——C++的Pimpl惯用法解析
http://blog.csdn.net/lihao21/article/details/47610309Pimpl(pointer to implementation, 指向实现的指针)是一种常用的,用来对“类的接口与实现”进行解耦的方法。这个技巧可以避免在头文件中暴露私有细节(见下图1),因此是促进API接口与实现保持完全分离的重要机制。但是Pimpl并不是严格意义上的设计模式(它转载 2017-06-02 19:46:40 · 373 阅读 · 0 评论