摘要:公司的C++代码是用Visual Studio来进行开发的,这样就会用到MFC中的很多基础类文件,比如 STDAFX.H, AFXWIN.H, 会发现诸如 CWinApp, CFrameWnd 之类的,刚开始看不是很理解都是干什么的,现在我们来大概解释一下 1. 在代码中很多cpp文件中,都可以看到
阅读全文
摘要:HANDLE是用来标记资源的,也就是handle to an object HINSTANCE,顾名思义,叫做Handle to an instance,是HANDLE的一种特殊情况,常用来标记App实例 HWND是一个基本类型,和char, int等同级别的,可以把它当做long型去看待. 它分为
阅读全文
摘要:在Windows操作系统中,我们常用2种编码格式,ANSI编码和Unicode编码 ANSI => 窄字节编码, 一个字符(char)占用一个字节(一个字节占8位)的存储空间, 也就是说一个字符占据8位(有效数据是除掉最高位的其他7位) => C++中用char来表示这种窄字节编码的字符 Unico
阅读全文
摘要:1. const char *ptr 和 char const *ptr => 这里这么理解,这个表示的是*ptr, 也就是指针指向的值,而修饰这个指针指向的值 (*ptr)的是const char或者char const, 表示两个意思: const => 表示是个常量,也就是说*ptr这个指针指
阅读全文
摘要:在看代码时,发现有不少地方使用GetSafeHwnd, 比如代码中的一些断言 ASSERT(NULL != m_UserId.GetSafeHwnd()); 这里的m_UserId是CFilterEdit类型,它继承自afxwin.h中的CEdit, 而这个CEdit又继承自afxwin.h中的CW
阅读全文
摘要:看代码的过程中,经常看到try{}catch{}语句块,而且还经常性的看到这样的语句 try { //保护代码 } catch(...) { //处理任何异常的代码 } 刚开始我对catch(...)非常困惑,因为C#中并没有这样的用法. 所以,特意来了解学习一下C++中的异常处理方式 通常来说,t
阅读全文
摘要:在我之前写的一篇博客https://www.cnblogs.com/wphl-27/p/17395066.html (C++中类成员函数参数前const,返回值前加const 以及 函数声明后面加const作用及区别) 中说明了在C++中, 在函数后面加上const修饰符的,是只读函数, 比如如下面
阅读全文
摘要:在看C++代码时,发现有inline 这个关键字,放在函数前面. => 这种函数就是内联函数, 那么,在C++ 中,到底什么是内联函数,以及内联函数是怎么使用的呢 通常而言,一个C/C++程序的执行过程是这样的: 你可以理解为就是一系列函数的互相调用过程. 这可以看出是一个调用链条, 这个函数调用链
阅读全文
摘要:在C#中我们经常见到的复合运算符是+=和-=, 比如 a+= b; 等价于 a = a + b; a-=b; 等价于a = a - b; C++中,除了这两个外,还有类似的复合运算符 |= 和 &= 首先要明白 | 和 & 是二进制运算符,分别为二进制 按位或 , 按位与 | => 按位或 运算符
阅读全文
摘要:在看代码时,发现有用到WPARAM, LPARAM, LRESULT 我去找它们的定义,发现在C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h 中,有如下定义 /* Types use for
阅读全文
摘要:有一次在看代码时,发现如下代码: m_strClassFileName = __FILE__; 把 __FILE__赋给了一个变量. 这是我第一次接触__FILE__, 于是查找了一下,才发现它是C++中三个特殊的宏之一. C++中共有三个特殊的宏, 分别是 __FILE__, __FUNCTION
阅读全文
摘要:在C++中,有Enum class这种说法,在Effective modern C++ 这本书中,也提到Prefer scoped enums to unscoped enum, 就是说要用有范围的enum class代替没有范围的enum. 为什么会有这个问题呢? 我们来看一个C++里面使用传统e
阅读全文
摘要:在看公司C++的source code时,我们发现在一个类class里面的成员函数,有3个地方都有可能加const关键字 1. 第1个地方是函数内的形参前面加const int fun(const int a) => 这个是表示参数a在函数fun内部不能被修改, 如果在函数内的语句试图修改a,编译器
阅读全文
摘要:在写这篇文章前,我们需要先来了解学习一下, 什么是 C++/CLI CLI - Common Language Infrastructure, 是通用语言基础架构,它是一种开发规范,它描述了允许多种高级语言在补充某些特定架构的情况下在不同的计算机平台上的可执行代码和运行时环境。 而 C++/CLI
阅读全文
摘要:C++中增加了引用这种类型,主要是把引用作为函数参数, 来扩展函数传递数据的功能 总结下来,C++中函数传参数有以下3种方式: 1. 将变量名作为实参和形参. 这时传给形参的是变量的值, 传递是单向的. 如果传递进函数中的这个参数, 它在函数中对它的值进行了变更. 显然,它并不会影响函数外面,传递进
阅读全文
摘要:今天学习C++时,发现C++中存在静态多态和动态多态 静态多态 => 也称为 编译期多态, 也称为静态绑定或前期绑定(早绑定) => 基于模板编程或者泛型编程的静态多态 动态多态 => 也称为 运行期多态 => 面向对象的动态多态,它基本上和C#语言中的多态是同一个概念,也基本是类似的实现方式 动态
阅读全文
摘要:在C++的初学者中,很容易把句柄理解成指针, 但其实,句柄并不是指针. 那么句柄是什么,一句话,句柄是资源(或项目)的唯一标识。 我们需要搞清楚的是,句柄Handle到底是怎么来标识资源的 在Windows程序中,有各种各样的资源(窗口,图标,光标等),系统在创建这些资源时为他们分配内存,并返回标识
阅读全文
摘要:本篇文章,我们来了解一下C++中的几种构造函数,以及析构函数 #include <format> #include <iostream> #include <string> using std::format; using std::cout; using std::string; const st
阅读全文
摘要:C++中写class时,对私有变量通常使用set和get方法来进行访问,比较标准的例子 class A { int ia {}; int ib {}; int ic {}; public: A (int a, int b, int c) : ia(a), ib(b), ic(c) {} //构造函数
阅读全文
摘要:先来看看C++中call by value的function void func(int a) { ++a; } int main(){ int a {7}; func(a); cout << format("value is {}\n",a); //a 会输出7 } c++中call by ref
阅读全文