![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ 重学
有一段时间没有从事高强度的C++编程,发现新版本的C++,从语法习惯到编程实践都有了较大的改变,最近需要看很多C++开源项目,于是决定像小学生一样重新学习,与时俱进。
howard_shooter
交流微信:17625988619
展开
-
不同版本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 · 334 阅读 · 0 评论 -
C++ 内存分配时地址对齐
如果希望在堆中分配的内存时,返回地址按照特定长度对齐,可以使用 aligned_alloc。因此在C++中,有时会希望在堆或栈中分配内存时,返回的地址能按照特定的长度对齐。如果数据地址的对齐与CPU相兼容,那么CPU读写内存时性能会更高。// 输出的地址总是按照4096对齐。原创 2024-04-07 14:23:08 · 253 阅读 · 0 评论 -
编译时表达式 constexpr
1、用constexpr修饰的函数或变量,表示可以在编译时计算,但是,如果代码中有对于这个函数的调用,并不意味着编译时一定会执行这个函数,只有这个函数返回了一个变量,然后代码中调用这个函数将返回值赋值给constexpr变量,才会导致编译时执行这个语句。2、除了上述特性,constexpr修饰的变量和函数,隐式的具备了const和inline的特性。// 这句编译时不会执行,只有运行时才会执行。有些傻逼为了用C++的新特性而用新特性,错误的使用constexpr会导致误解,非常蛋疼。原创 2024-04-02 17:04:30 · 206 阅读 · 0 评论 -
运行时断言(assert)与编译时断言(static_assert)
在代码中写assert,debug版本不定义NDEBUG,release版本定义NDEBUG,这就是assert的使用场景。assert是运行时断言,如果在编译时定义了NDEBUG宏,则assert语句会被忽略掉(丢弃)。static是编译时断言,用来判断编译时的constexpr,如果断言中是false,则编译错误。这里所描述的是GNU编译器。原创 2024-04-02 16:16:59 · 275 阅读 · 0 评论