
C++ 重学
有一段时间没有从事高强度的C++编程,发现新版本的C++,从语法习惯到编程实践都有了较大的改变,最近需要看很多C++开源项目,于是决定像小学生一样重新学习,与时俱进。
howard_shooter
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ccache是个啥玩意?
这个缓存不同于make时对于维修改的源文件不编译这种加快编译速度的方法。而是即使执行了make clean或者cmake删除了构建中间文件,仍然可以使用缓存。可以参考这篇文章,写的很好,很易懂,尤其是前半部分,3分钟阅读时间。这个编译缓存,可以缓存预处理和parse的结果。ccache是需要安装的。原创 2024-10-28 16:30:40 · 515 阅读 · 0 评论 -
新 C++ using 和 typename 关键字
typename关键字,用于放在模板类的抽象类型前面,表示这是个类型,我的理解它用来修饰一些字符串,告诉编译器,这个字符串使一个类型名,而不是变量名,注意using、typename都是在编译时生效和检查的关键字,影响的是编译过程。using关键字,网上有许多说法,什么引入命名空间之类,这些说法的问题是,理解起来比较困难,易于理解的说法是,它可以定义一种别名,一般用来定义某种类型的别名,并且使当前命名空间可以使用。在编译时,会检查模板和传给它的类是否一致,如果不一致,那么运行时肯定会出错。原创 2024-08-23 14:33:16 · 412 阅读 · 0 评论 -
不同版本gcc、g++的默认支持的std C++标准
我主要是用C++的代码:gcc编译器有个__cplusplus宏,这个宏是个字符串,这个字符串值与它正在使用的的C++标准是有联系的,但是仅仅从字符串比较难看出gcc编译所使用的C++标准,而且当编译时指定-std=选项时,这个宏就会改变,表示当前编译所使用的C++标准,一个版本gcc一般会支持多种C++标准,但是有个默认标准,就是不使用-std选项时__cplusplus宏的值。例如,g++-9可以支持c++98到c++14,g++-11可以支持c++98到c++14。原创 2024-08-22 17:21:01 · 3063 阅读 · 0 评论 -
C++ 内存分配时地址对齐
如果希望在堆中分配的内存时,返回地址按照特定长度对齐,可以使用 aligned_alloc。因此在C++中,有时会希望在堆或栈中分配内存时,返回的地址能按照特定的长度对齐。如果数据地址的对齐与CPU相兼容,那么CPU读写内存时性能会更高。// 输出的地址总是按照4096对齐。原创 2024-04-07 14:23:08 · 404 阅读 · 0 评论 -
编译时表达式 constexpr
1、用constexpr修饰的函数或变量,表示可以在编译时计算,但是,如果代码中有对于这个函数的调用,并不意味着编译时一定会执行这个函数,只有这个函数返回了一个变量,然后代码中调用这个函数将返回值赋值给constexpr变量,才会导致编译时执行这个语句。2、除了上述特性,constexpr修饰的变量和函数,隐式的具备了const和inline的特性。// 这句编译时不会执行,只有运行时才会执行。有些傻逼为了用C++的新特性而用新特性,错误的使用constexpr会导致误解,非常蛋疼。原创 2024-04-02 17:04:30 · 278 阅读 · 0 评论 -
运行时断言(assert)与编译时断言(static_assert)
在代码中写assert,debug版本不定义NDEBUG,release版本定义NDEBUG,这就是assert的使用场景。assert是运行时断言,如果在编译时定义了NDEBUG宏,则assert语句会被忽略掉(丢弃)。static是编译时断言,用来判断编译时的constexpr,如果断言中是false,则编译错误。这里所描述的是GNU编译器。原创 2024-04-02 16:16:59 · 403 阅读 · 0 评论