![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 95
弹吉他的小刘鸭
Happiness is nothing but self-building.
展开
-
std::bind与lambda表达式
bind-vs-lambda参考:bind-vs-lambda参考:why-use-stdbind-over-lambdas-in-c14参考:Lambdas vs. std::bind in C++11 and C++14背景介绍In C++98, such binding was accomplished via std::bind1st and std::bind2nd. TR1 added std::tr1::bind, which was promoted to std::bind原创 2022-07-19 19:15:54 · 1333 阅读 · 0 评论 -
C++ 使用typename来修复模板编译错误
在看Unreal Engine源码时,有一行代码我比较疑惑:下面是这些函数的定义:疑惑的点在于:因为在我之前的理解,typename是只能用于template的尖括号里的,所以写下这篇文章研究一下。参考: Why typename?先看个例子:想象的用法是,当T为MyRandomClass时,模板实例化为:然后,上面的模板直接编译会报错,报错位置为,报错信息为:Error信息很明确,这里的E,模板函数是认不出来的,因为它把E当成了变量,而不是Type。至于具体怎么改,警告其实已经告诉我了,改成原创 2022-07-14 14:49:25 · 956 阅读 · 0 评论 -
trivial、standard layout、POD和literal类型解析
参考资料microsoft_trivial-standard-layout-and-pod-typesstackoverflow_trivial-vs-standard-layout-vs-podWhen is a type in c++11 allowed to be memcpyed?is_pod vs is_trivial vs is_trivially_copyable vs is_standard_layout关于layout单词layout用于表示class、struc或union原创 2021-06-09 16:17:40 · 893 阅读 · 1 评论 -
C++17 ———— std::optional、std::variant和std::any
std::optionalThe class template std::optional manages an optional contained value, i.e. a value that may or may not be present.A common use case for optional is the return value of a function that may fail.这个东西比较难讲清楚具体是干啥的,这里直接举一个例子:比如说有一个读取文件的函数,这个函数原创 2021-06-05 20:19:45 · 1946 阅读 · 0 评论 -
C++ 输出当前exe所在的文件路径
1. C++的main函数自带的两个参数还记得吗?int main(int argc,char * argv[]);//int main(int argc,char ** argv); //也可以这么写 是一样的可以试着输出argv[0],发现输出的是当前exe的完整运行路径。配合下述语句,可以获得exe对应的Debug文件夹对应的路径int main(int argc,char *...原创 2019-09-07 10:44:51 · 1147 阅读 · 0 评论 -
C++ Concurrency in Action, Second Edition阅读笔记(一、二章)
1 Hello, world of concurrency in C++!1.1.1 Concurrency in computer systems老式的计算机是单核的,会在不同任务间切换,让人感觉是同时进行的,这就叫做并发(Cocurrent),注意,这些Task的切换很快( task switches are so fast)在进行SwitchTask时,OS需要存储CPU状态和当前运行任务的指令指针,然后找到对应switch的任务,然后加载对应的CPU状态和任务。因此,单核的计算机相较于多原创 2020-12-27 14:30:23 · 1088 阅读 · 3 评论 -
C++ Unnamed/anonymous namespace(匿名命名空间)
Unnamed Namespace匿名命名空间,就是没有名字的namespace,如下所示:#include <iostream> namespace // unnamed namespace{ void doSomething() // can only be accessed in this file { std::cout << "v1\n"; }} int main(){ doSomething(); // w原创 2020-10-20 13:18:01 · 2662 阅读 · 0 评论 -
C++ Run-time type information
static binding和dynamic bindingBinding一般指的将一个物体绑定到另外一个物体上,C++编译时指的Binding是,将函数调用和函数具体的定义连接到一起。在C++里,当函数被调用时,程序会把对应函数的定义部分链接到函数的声明处。Binding分为static和dynamic binding两种,区别为:static binding位于编译期,后者位于运行期,所以也叫early binding和late binding。如果一个函数被调用时的参数能在编译期决定,那么原创 2020-08-20 15:31:31 · 260 阅读 · 0 评论 -
C++ typedef
要想理解typedef,最好先介绍一下函数指针函数指针原名叫function pointer,听上去名字挺吓人,其实很简单,跟其他数据类型的写法差不多,函数指针也是一个指针,只不过类型有点特殊而已。这里只需要记住它的写法就可以了:// 声明一个void类型的函数,没有参数void func();// 声明一个void类型的函数指针,没有参数void (*fun_ptr)(): //仅仅是前面加个*而已// 定义该函数void func(){ cout << 1 <<原创 2020-06-11 17:25:15 · 416 阅读 · 0 评论 -
C++中的库文件导入与导出
C++的库文件分为两种:lib文件和dll文件,前者是静态的,会在build时就被打包到exe内,单独的一个exe文件就可以运行,而后者是动态的,不会被打包到exe内,除了exe,还需要对应的dll文件一起才可以运行。C++的库文件分为两个部分,头文件和对应的cpp库文件,这也意味着我们在使用库文件时,需要用到这两个地方的路径。举一个例子,创建一个空项目,创建Dependencies目录,里面存放网上下下来的OpenGL的glfw内容,如下图所示:include里存放了所有的头文件,lib-vc20原创 2020-05-22 14:17:52 · 5914 阅读 · 0 评论 -
C++中的pch文件
参考链接:https://www.youtube.com/watch?v=eSI4wctZUto&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb&index=72PCH全称为:Pre-compiled Header,被预先编译过的头文件,对于比较大型的工程,往往编译时间会很久,通过使用PCH,把那些不经常发生改动的头文件都预先编译出来,就可以大大节...原创 2020-05-06 20:42:52 · 5774 阅读 · 4 评论 -
C++ thread学习(一)
c++ 11之后有了标准的线程库:std::thread一.简单的多线程例子在单线程里,如果要利用cin函数等待用户输入,那么程序会被暂停,等待用户的输入。如果想实现这样的功能则需要用多线程:一直在屏幕上循环打印消息,当输入Enter时终止打印。具体代码如下,主线程暂停在了std::cin.get()函数这里,等待用户的输入,同时,另外一个线程再不断打印Working消息,关于cin.ge...原创 2020-03-20 13:56:38 · 707 阅读 · 0 评论 -
Cherno C++ 学习(二)
学习来源https://www.youtube.com/user/TheChernoProject/playlistsC++的static关键字static分为两种用途,一种是在类(或结构体)外,另一种在类(或结构体)内。这次先分析第一种:1. 在类外的static对于在类(或结构体)外的函数或变量,我们将其称为全局函数或全局变量,其特点在于,对于项目内的每一个CPP文件,都可以访问该全...原创 2020-02-28 23:08:21 · 731 阅读 · 0 评论 -
Cherno C++ 学习(一)
1. vs有两种默认的方式,debugrelease,其中在项目的C++属性栏中,debug模式下里面的Optimization是默认关闭的,而release模式是默认开启的,所以Optimization会加速程序运行,但是不适合Debug。2. 头文件是在预处理阶段编译的,实际编译时,Compiler编译的只有cpp文件,每一个cpp文件都会被单独编译,然后每一个cpp都会生成一个其对应的(v...原创 2020-04-05 15:56:16 · 1719 阅读 · 0 评论