c++
lylhw13_
喜欢探究Linux源码,喜欢从本质分析问题
展开
-
示例解析 --as-needed 和 --no-as-needed 的作用和区别
在编译pytorch时,会注意到链接参数 -Wl,--no-as-needed, 那么这个参数的作用是什么呢?原创 2024-04-16 20:26:11 · 756 阅读 · 0 评论 -
undefined reference 或 undefined symbol 的常见情形汇总
在程序编译过程中,经常会遇到未定义的问题。本文尝试总结几种常见的导致未定义问题的情况,可以帮助用户在遇到相关问题时,方便排查。原创 2023-06-19 22:39:31 · 4276 阅读 · 0 评论 -
C++技巧之不透明指针
不透明指针常用于头文件中结构体的定义,属于一种常见技巧。原创 2023-06-04 22:51:44 · 346 阅读 · 0 评论 -
在 Windows 和 Linux 平台如何查看 C++ 名称装饰
名字装饰是C++编译器用来为函数和对象添加额外信息的方法。名字装饰有以下几种作用:使链接器能够区分不同版本的重载函数。使链接器能够检查对象和函数在所有模块中的声明方式是否完全相同。使链接器能够在错误信息中提供关于未解析的引用类型的完整信息。名字装饰是为了解决问题1而发明。附带解决了其他问题。以如下一段代码为例:int f(int i) { return i; }int f(void) { return 0; }int g(void) { return f() + f(1); }w原创 2021-11-04 19:51:08 · 489 阅读 · 0 评论 -
面向对象设计的原则
单一职责原则 SRP就一个类而言,应该仅有一个引起它变化的原因开放封闭原则 OCP软件实体(类,模块,函数等)应该是可以扩展的,但是不可修改的。也就是对扩展开放,对修改封闭。Liskov 替换原则 LSP子类型必须能替换掉他们的基本类型依赖倒置原则 DIP抽象不应该依赖于细节,细节应该依赖于抽象接口隔离原则 ISP不应该强迫客户依赖于他们不用的方法,接口属于客户,不属于它所在的类层次结构。重用发布等价原则 REP重用的粒度就是发布的粒度共同重用原则 CCP一个包中的所有类应该是共同原创 2021-06-06 17:56:05 · 114 阅读 · 0 评论 -
git 下载 QT 源码
QT 源码有很多子模块,要递归下载这些子模块方法1git clone --recursive github.com/qtproject/qt5.git -branch 5.15.2方法2git clone https://github.com/qtproject/qt5.git --branch 5.15.2git submodule update --init原创 2021-04-16 22:29:42 · 782 阅读 · 0 评论 -
C/C++ 大小端字节序的判断和转换
大小端原理示意图 int x = 0x01; 地址增长方向 -----> 小端序,低位位于低字节处 +----+----+----+----+ |0x01|0x00|0x00|0x00| +----+----+----+----+ A | &x 大端序,高位处于低字节处 +----+----+----+----+ |0x00|0x00|0x00|0x01| +----+----原创 2021-03-07 18:32:28 · 2985 阅读 · 0 评论 -
C/C++ 中 assert 和 static_assert 的宏实现
assert 用于运行时的断言实现方法如下#define assert(x) \ do { if (!(x)) printf("assertion failed: %s", #x); } while (0)在宏语句中,参数可以通过前置 # ,将其转化为字符串常量。static_assert 用于编译期断言实现方法如下:#define static_assert(a, b) \ do { switch (0) case 0: case (a): ; } while (0)原理:sw原创 2021-03-07 16:51:45 · 545 阅读 · 1 评论 -
C/C++ 中 extern 的用法
extern 主要有两方面作用:分离编译extern 表示一个外部变量:外部变量必须定义在所有函数之外。在一个源程序的所有文件中,一个外部变量只能在某文件中定义一次,而其他文件可以通过extern声明来访问它(定义外部变量的源文件中也可以包含对该外部变量的extern声明)。外部变量的定义中必须指定数组的长度,但extern声明则不一定要指定数组的长度。外部变量的初始化只能出现在其定义中。// file1extern int sp;// file2int sp = 0;对于co原创 2021-02-20 17:41:00 · 824 阅读 · 0 评论 -
C/C++ 中 static 关键字
static 关键字C语言:修饰全局变量或函数:起到隐藏的作用,该变量或函数只在该文件可见。修饰函数的局部变量:起到持久化作用,该变量一直占据存储空间,且只能在该函数使用。C++引入class,在保持和C语言兼容的同时,又添加两种新用法:修饰class的数据成员,即所谓“静态成员”。静态数据成员每个class只有一份。修饰class的成员函数,即所谓“静态成员函数”。这种函数只能访问静态成员和静态成员函数。...原创 2021-02-20 16:29:50 · 107 阅读 · 0 评论 -
使用 stylish 解决 c++ boost 官网字体太小
boost 官网 www.boost.org 网页字体太小, 阅读时极不方便。按照如下步骤可以自由设置网页字体,并应用到所有相关页面。在chrome中安装插件stylish点击选项,开始编写自己的css格式如下图所示注意,编写格式时,通过右键->检查,可以查看当前页面源码,定位到目标区域的CSS代码,将其拷贝到自己的CSS格式文件中并加以修改即可。p, div.document, div.footer { text-align: left; font-si原创 2020-11-25 18:56:08 · 259 阅读 · 0 评论 -
c++ bind 函数总结
bind 函数一般分为以下三种使用情况:普通函数auto f1 = std::bind(f, args); // 默认拷贝传递auto f2 = std::bind(f, ref(i), _1); // 引用传递auto f3 = std::bind(f, cref(i), _1); // 常引用传递函数对象struct F{ int operator()(int a, int b) { return a + b; }};F f;auto f1 =原创 2020-11-24 23:23:44 · 276 阅读 · 0 评论 -
编译 boost 程序错误总结
boost 库版本为:1.74.0g++ 版本为:x86_64-apple-darwin17.7.0编译 boost 普通程序时,出现如下错误:Undefined symbols for architecture x86_64:“boost::chrono::steady_clock::now()”, referenced from:解决办法是指定 C++ 的版本:g++ -std=c++11 helloworld.cpp编译 boost 的多线程程序时,出现以下错误:Undefin原创 2020-11-24 21:14:25 · 1504 阅读 · 1 评论 -
C++中要求或禁止在堆上创建对象
只在堆上创建对象方法:将析构函数设置为私有或受保护的class OnlyHeap{public: void destory() const{ delete this; }protected: ~OnlyHeap(){}};int main(){ //OnlyHeap oh; // Error: Variable of type 'OnlyHeap' has protected destructor const OnlyHeap* ohp = ne原创 2020-10-24 14:31:14 · 1057 阅读 · 0 评论 -
在C++类中vector声明,报错 “expected parameter declarator”
在C++类中,以如下方法声明vector,会报错: “expected parameter declarator”。class A{private: vector<int> aux(5); //意欲申请长度为5的vector};错误原因是:编译器无法区分该语句是成员变量声明还是成员函数声明。解决办法是:消除歧义。有一下三种方法:利用构造函数列表初始化class A{private: vector<int> aux;public: A(原创 2020-07-15 19:21:01 · 19473 阅读 · 5 评论 -
c++发布包去除运行时对 vcruntime140.dll 的依赖
c++发布包去除运行时对vcruntime140.dll的依赖原创 2020-05-19 17:18:48 · 2166 阅读 · 0 评论