随笔分类 - C/C++
摘要:linux C中 由于我的第一语言为C,第一环境为linux,所以这里对于C下线程创建不做过多讨论,重点在我接触不太久的C++,并且只讨论线程创建和线程终止以及资源回收。不讨论线程通信和同步。 Linux系统下的多线程遵循POSIX线程接口,通常是通过pthread库实现(libpthread.so
阅读全文
摘要:接触cmake很多年了,但是从来没自己写一个完整的CMakeLists.txt构建过自己的动态库,因为工作以来动态库我都是用别人开源的,基本没有构建自己动态库的需求。今天需要将一个使用automake构建的老库替换为cmake来构建于是了解了一些相关细节,准备迁移过来。 极简例子 以C语言为例,一个
阅读全文
摘要:在C++ Primer Plus中,最开始介绍的是变量和引用变量。变量实际就包含了左值类型的变量和右值类型的变量。 引用变量 引用是C++引入的概念,引用变量是已定义的变量的别名(alias)。引用的创建示例如下: int a = 10; int &b = a; 通过compiler explore
阅读全文
摘要:什么是函数模板 C++的函数模板提供了一种方法,让编译器根据你写的模板,来自动按需生成函数。这个模板就称之为函数模板。函数模板格式如下: template <typename AnyType> void MyFunctionTemplate(AnyType ¶m) { } 这里AnyType
阅读全文
摘要:decltype引入的原因之一是在函数模板中遇到如下情形: template <typename T1, typename T2> void foo(T1 a, T2 b) { ?type? tmp = a + b; } 此时,tmp类型该定义为哪种呢?我们知道基础数据类型相加时会自动进行类型提升,
阅读全文
摘要:定义了一个类A,里面有个模板函数。因为我习惯每个类的声明和实现分开用*.h,*.cpp写。所以类A的源码如下: A.h #ifndef A_H #define A_H class A { public: A(); template <typename T> void fuck(T a); }; #e
阅读全文
摘要:转自 https://blog.csdn.net/boysoft2002/article/details/114263346
阅读全文
摘要:为什么要初始化成员 对于类成员是基础数据类型,例如int、char这些,构造对象时,成员不会被初始化,值是随机的。下面代码可以验证下: class A { public: A(){} void showMember() const { std::cout << "a:" << a << std::e
阅读全文
摘要:初级 1. 内存管理:需要在构造函数中分配内存给 ptr,并在析构函数中释放内存,以避免内存泄漏。 MyClass::MyClass() { ptr = new int; } MyClass::~MyClass() { delete ptr; } new delete, new[] delete[]
阅读全文
摘要:什么是函数重载 函数的重载能使我们定义多个同名函数,我们在调用时,编译器会根据函数特征标自动帮我们调用对应的函数。嗯,这个特性又是C++为了方便程序员,通过编译器帮我们干活,设计出来的一个东西。通过C和C++的对比,我们可以看到函数重载的这种特性是怎么提出来的。 实现原理 C的做法 假设我们使用C要
阅读全文
摘要:直接使用gdb调试Qt应用时,Qt的一些数据类型没法友好的显示出来,而qtcreator可以很好的展示出来,qtcreator也是通过gdb来调试的,在展示数据时,其实是gdb通过python脚本来处理后显示的,这些python脚本位于/usr/share/qtcreator/debugger这个位
阅读全文
摘要:clion是linux下比较强大的C/C++ IDE,通过扩展也可以支持很多其他语言,例如shell,lua, perl, python,rust。唯一缺点是收费,但是相对它给我带来的便利,这点费用不算什么。我一般用来开发C/C++/项目,它支持3种方式解析工程源码,分别是 - Makefile -
阅读全文
摘要:https://blog.csdn.net/field1003/article/details/123420966
阅读全文
摘要:在linux下做c/c++开发时,经常遇到一个问题,就是如果代码引用了大量的第三方库,链接的时候常忘记或者根本就不知道具体要链接哪个库,导致 链接的时候报未定义的引用,特别是一些库你不太熟悉时,甚至都不知道该链接谁。 /usr/bin/ld: CMakeFiles/gstdemo.dir/main.
阅读全文
摘要:Sanitizersers是一个工具集合,由google开发并开源,项目地址sanitizers 。Sanitizers包括系列工具: AddressSanitizer,检测内存访问问题 MemorySanitizer,检测未初始化内存问题 ThreadSanitizer,检测线程竞态和死锁问题 L
阅读全文
摘要: valgrind包含多个工具,通过--tool=xxx指定,最被大家熟知是memcheck,主要解决内存泄露,越界访问,未初始化却去引用等问题,它是默认选项,如果未指定--tool,默认就是memcheck了。而在多线程编程中,最常见的bug有:数据竞争(data race),死锁,错误的使用P
阅读全文
摘要:valgrind使用 内存检查工具memcheck valgrind --tool=memcheck yourprogram 多线程工具helgrind valgrind --tool=helgrind yourprogram 其他常用选项 指定log输出文件,有时候不想程序的打印输出和valgri
阅读全文
摘要:do {} while(0)的妙用 转自 "https://blog.csdn.net/qq_16777851/article/details/80867981" 避免空的宏定义在声明时出现警告 避免出现歧义代码 上面宏在使用时,展开后: 有些风格的代码只有一个语句的if会省略{},这样导致了仅 受
阅读全文
摘要:定义 template <class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& val); 作用 在范围[first, last]之间查找第一个等于val
阅读全文