
C++
文章平均质量分 53
3A是个坏同志
SG-Studio负责人
展开
-
STL容器自定义内存分配器
STL 和 STL 扩展类现在接受额外的模板分配器参数。分配器参数的默认值来自C++标准库std::allocator<T>。您也可以提供自己的分配器,以便在应用程序中自定义内存管理。为了提供您自己的模板类作为分配器,模板必须符合特定接口,包括成员函数和类型定义以及其句法和语义要求。下面是一个简单的分配器的部分代码片段: template <class T> class my_allocator { typedef size_t ..翻译 2021-08-28 22:39:06 · 1058 阅读 · 0 评论 -
constexpr:确定性的常量优化
从C++11开始,规定允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。constexpr int a = 3; //3是常量表达式constexpr int b = a+1; //b是常量表达式constexpr int c = get_size(); //只有当get_siz...原创 2018-09-16 07:53:40 · 906 阅读 · 0 评论 -
虚函数表长什么样
对C++了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图转载 2017-03-12 17:44:52 · 734 阅读 · 0 评论 -
指针的资源管理之罪
在许多人眼里,指针的好处是对相同指针类型的指针值的不同的数值表示总可以找到不同的地址对应,这样就可以在整数算术和关系操作的基础上毫无额外代价地定义指针算术和关系操作;而指针上的操作符“*”抽象的正是间接寻址操作。这就是一些用户口中的所谓“接近底层”。这种简单直接实现的最大好处就是容易以非常小的代价生成针对特定体系结构的代码。不过因为意图不明的关系,使用指针的代码比使用其它更清晰的替代的转载 2016-08-25 21:08:39 · 819 阅读 · 1 评论 -
C++还是C,这是个问题
注:本文的作者是C++之父,联合作者是我(翻译者)。但是联合作者不承担任何责任,对本文内容有异议请找第一作者我一直在一个可以装逼的群里呆着,这群里经常会来很多萌新。他们总是要学C语言。本身我对C语言没啥意见,但是我要装逼啊,所以我就要和他们讨论,在我和善的和他们讨论想干啥的时候,发现他们想干的事完全可以用更加优美的现代语言解决,甚至跟C语言没半毛钱关系。有的程序是用C++比较好,所以有翻译 2015-07-24 18:36:24 · 904 阅读 · 0 评论 -
taking address of temporary错误
因为函数返回的是一个TYPE的临时对象,这个对象在函数执行完毕后就会被清理,然而在调用A时却对它进行了引用。这就相当于引用了一个并不存在的变量的地址。因为地址是不变的,这段代码如果执行的话不会出现问题,但是却可能导致不可知的原创 2014-12-06 21:31:21 · 22908 阅读 · 5 评论 -
关于C++11中sequenced-before的讨论
C++ 是一个注重效率的语言,标准不指定一些表达式的求值顺序就是为了让编译器能做尽可能多的优化,即便要牺牲掉例如 i=i++ 这样表达式的正确性。在 C++98/03 的标准中定义了 sequence point 来描述求值顺序,到了 C++11 中,用了更加清晰的 sequenced-before 来描述它。下面要说的是 C++11 中的 sequenced-before。 sequ原创 2016-05-15 22:17:11 · 1891 阅读 · 0 评论 -
原子操作的语义解读
任何 C++ 操作符的求值顺序都是 unspecified(后面提到的除外),这包括在函数调用表达式中函数参数的求值顺序以及任何表达式的子表达式的求值顺序。编译器可以按照任意顺序将它们求值,对于相同的表达式,编译器也可以选择不同的顺序将它们求值。在 C++ 中,没有什么从左到右或者从右到左的求值顺序,只有操作符从左到右和从右到左的结合性。就比如说表达式f1() + f2() + f3() 会通翻译 2016-05-15 20:53:38 · 2490 阅读 · 0 评论 -
怎么写函数指针
在C++/C中,函数的函数名本身就是地址,而函数指针就是存储这个地址的变量。如下代码void fun(int a, int b) {.....};fun就是一个地址,而void (*p)(int, int) = fun;就是指向这个函数的指针,其实说来p函数指针这时也使指向这个函数的,所以要使用这个函数的话,理论上应该写成(*p)(2, 3);这种形式,但是实际上,通过p(2, 3)也可以...原创 2016-04-23 20:36:47 · 1960 阅读 · 2 评论 -
Qt5安卓开发环境配置
一.配置和安装SDK原创 2014-09-21 20:00:20 · 1286 阅读 · 0 评论 -
双锅链接库方案
双锅链接库是一个可以把任何可以生成EXE的编程语言功能互通的编程模式,运用双锅链接库(下文简称FSG)方法编写的EXE,在修改为FSG格式后就可以通过双锅链接库API来在其它语言中进行指定功能的调用,达到了程序语言之间功能互通的目的。本包中包含有编写和使用双锅链接库的教程,以及一些编写好的双锅链接库。 注释:主要是给一些功能不多的语言互通用的,如果是一个完善的语言可以用自己的库,或者EXE传...原创 2014-02-24 19:18:44 · 994 阅读 · 0 评论