C++(accumulate)
文章平均质量分 57
liuwxye
这个作者很懒,什么都没留下…
展开
-
C++ 将析构后的指针传递给函数
在C++中,定义一个类,类中有一个private 成员变量,如果在类内定义一个指针函数,在类外一个函数定义并初始化,将将成员变量的指针返回的同时,调用析构函数,则C++会自动帮我们将成员变量的值”抹去“。// pointer.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <iostream>using namespace std;class A原创 2017-08-16 22:48:09 · 374 阅读 · 0 评论 -
C和C++混合编译,extern"C"的用法
第一篇:转载于C和C++混合编译关于extern_C 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码#ifdef __cplusplus extern "C" { #endif /**** some declaration or so **...转载 2018-04-21 15:03:53 · 1032 阅读 · 0 评论 -
多线程
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。[1] 在一个程序...原创 2017-09-13 13:22:21 · 371 阅读 · 0 评论 -
template显式具体化、显式实例化、隐式实例化
模板的局限性:假设有如下模板函数:template <class T>void f(T a, T b){…}通常,代码假定可执行哪些操作。例如,下面的代码假定定义了赋值,但如果T为数组,这种假设将不成立:a = b;同样,下面的语句假设定义了<,但如果T为结构,该假设便不成立:if(a > ...转载 2018-05-22 20:46:56 · 1238 阅读 · 0 评论 -
C++友元函数
C++友元函数的理解我们知道,C++ 的三大特性之一:封装。 如果我们需要对外部提供一个接口,去访问某个类中的全部成员(不管是public还是private)。则C++的友元函数能够为我们实现。关于友元函数的具体实现我就不再解释了,具体可以参考友元函数。 现在我想通过某个类的成员函数,去调用友元函数class A{public: A()=default; friend...原创 2018-08-10 16:09:03 · 225 阅读 · 0 评论 -
bind 非静态成员函数时 注意传入对象
#include &amp;amp;quot;stdafx.h&amp;amp;quot;#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include &amp;amp;amp;lt;functional&amp;amp;amp;gt;using namespace std;std::function&amp;amp;amp;lt;i原创 2018-08-02 10:15:40 · 1668 阅读 · 0 评论 -
clang warning LNK4217 本地定义的符号 __std_terminate
使用clang的时候,出现这样的警告:warning LNK4217: 本地定义的符号 __std_terminate 在函数 &amp;quot;int `public:static unsigned __int64 __cdecl std::char_traits&amp;amp;lt;char&amp;amp;gt;::length(char const...转载 2018-05-28 19:53:44 · 5615 阅读 · 0 评论 -
strtok函数源码
今天用到strtok时,总感觉怪怪的,为啥第二次调用第一个参数要用NULL, 难道是函数内部保存了当前的状态,假如这样的话,那就不能对多个串交叉调用strtok了,而且保存这个状态的不是全局变量就是static变量。 于是看了他的源码,有几个不同的版本,思想是一样的。 感觉写的挺巧妙的,深深的折服这些写库函数的牛人了。 下面是源码版本一 char *s; /*...转载 2018-12-13 20:50:44 · 477 阅读 · 0 评论 -
What is the VTT for a class?
What is the VTT for a class?The page "Notes on Multiple Inheritance in GCC C++ Compiler v4.0.1" is offline now, and http://web.archive.org didn't archive it. So, I have found a copy of the text at t...翻译 2018-12-19 19:26:40 · 825 阅读 · 0 评论 -
深入理解数据成员指针、函数成员指针
1. 数据成员指针对于普通指针变量来说,其值是它所指向的地址,0表示空指针。 而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示。例:代码示例:struct X { int a; int b;};#define VALUE_OF_PTR(p) (*(long*)&p)int main() { in...转载 2018-12-20 19:27:46 · 680 阅读 · 0 评论 -
__stdcall和__cdecl的区别
__cdecl#include &lt;iostream&gt;using namespace std;int __cdecl add(int a,int b){ return 0;}int main(){ int a=1; int b=2; add(a,b); int c=3; return 0;}_main: leal 4(%esp), %ecx and...原创 2019-03-11 20:19:43 · 1821 阅读 · 0 评论 -
C++ 内存池
关于内存池在大多分配器中,在标准库中的容器中,一般是用标准库的template <class _Ty, class _Alloc = allocator<_Ty>>;也就是标准库的allocator,使用的是operator new。值得注意的是,此allocator是带有cookie的,内部实际就是一个operator new调用一次malloc。内存池的设计,一个通...原创 2019-05-14 15:10:28 · 293 阅读 · 0 评论 -
atoi stoi
atoi和stoi的区别①atoi()的参数是 const char* ,因此对于一个字符串str我们必须调用 c_str()的方法把这个string转换成 const char*类型的,而stoi()的参数是const string*,不需要转化为 const char*;②stoi()会做范围检查,默认范围是在int的范围内的,如果超出范围的话则会runtime error!而atoi()...原创 2019-07-31 15:21:37 · 547 阅读 · 0 评论 -
C++右值引用
一般的,我们最先接触的引用大多是诸如:int val = 10;int &ref = val;上述的引用方式我们称为左值引用。 而右值引用发生在如下情况:int val = 10;int & ref = val + 1; //此句不合法,因为右值无法赋值给左值引用const int& ref = val + 1;//合法解释:资料说C++中临时变量默...原创 2018-04-10 14:43:33 · 248 阅读 · 0 评论 -
C++虚函数表(vtable)和虚函数指针(vfptr)
编译器会构建一张虚表( vtable ),每一个类都有自己独特的虚表。同时,在这个继承链上,编译器会为基类插入一个隐式的指针(一般是对象的首地址),指向虚表,称为__vptr。然后,子类继承父类时,会获得继承下来的__vptr,再根据自己的类的情况兼容(修改虚函数表里的值、发生偏移等。于是,当我们构建具体的类时,若是基类类型,__vptr就会指向父类的vtable,若是子类类型,__vptr就会指原创 2018-01-23 21:54:39 · 7116 阅读 · 2 评论 -
C++ dynamic_cast、const_cast 、static_cast、reinterpret_cast
dynamic_cast: 通常在基类和派生类之间转换时使用 const_cast: 主要针对const和volatile的转换 static_cast: 一般的转换(no run-time check)通常,如果你不知道该用哪个,就用这个。 reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。 1)static_cast(原创 2018-01-19 21:03:23 · 344 阅读 · 0 评论 -
C语言 同步 异步
进程同步用来实现程序并发执行时候的可再现性。 一.进程同步及异步的概念 1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 2.异步 异步的概念和同步相对。当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。 在windows的调用中:system("notepad"); //同步ShellExe原创 2017-09-07 16:45:46 · 7223 阅读 · 1 评论 -
C++ class和struct的区别
class 和 struct的一个区别就是对默认的继承访问权限不同 class的默认访问属性是私有的(private),而struct的默认访问属性是公共的(public)用class定义类:class A{ int i;};这与下面代码等价:class A{ private: int i;};而用struct定义类:struct原创 2017-07-17 18:28:50 · 264 阅读 · 0 评论 -
C++中char和int之间的联系
字符字面值一般是用一对单引号来表示。char类型一般就是用字符字面值来初始化、赋值。由于char类型的是单字节长度,当给char类型的变量用字符 字面值赋值时,当单引号里面的内容超过一个字节时,系统会自动截取一个字节的内容给char变量,忽略其他的字节内容。比如char a='1234';c++会认为单引号里的每一个数值都看做一个字符字面值,也就是说1 2 3 4各占一个字节,'1234'也就翻译 2017-09-11 22:32:07 · 2465 阅读 · 0 评论 -
C++传引用
在定义一个类或者结构体的时候,将类或者结构体传进函数,如下面代码所示#include <iostream>using namespace std;typedef struct date *PtrTodate;struct date{ int p[10];};int func(int sum,PtrTodate T){ sum = 0; //T=new date;原创 2017-10-09 20:50:45 · 1374 阅读 · 0 评论 -
Y must be a vector or a character array
在matlab调用svm的时候,出现 Y must be a vector or a character array的错误。 解决办法: 1.点击Matlab左上角的file,选择set path 2.在弹出的选项框中,选择第二个选项And with Subfolders 3.找到自己的libsvm文件夹,点确定 4.点击save,关闭set path原创 2017-10-21 15:53:12 · 938 阅读 · 0 评论 -
C++ 成员函数与成员变量的关系
在C++中,#include <iostream>using namespace std;struct Data{ int x = 10; int y() { return 20; } };int main(){ Data* p=NULL; // 不用 new 创建指针 cout<<p->x<<endl; //抛出异常 cout<<p->y(原创 2017-10-31 13:35:35 · 4547 阅读 · 0 评论 -
vector 数组 二维数组
C++中可以通过容器来建数组,二维数组#include "stdafx.h"#include <iostream>#include <vector>using namespace std;int main(){ vector<int> col; vector<vector<int>>array; for (int i = 0; i<3; i++) {原创 2017-10-31 20:52:22 · 421 阅读 · 0 评论 -
C++ vector resize和reserve
首先必须弄清楚两个概念: 1.capacity 指容器在分配新的存储空间之前能存储的元素总数,也可以说是预分配存储空间的大小。 2. size 指当前容器所存储的元素个数resize:(resize既分配了空间,也创建了对象)1、resize(n) 调整容器的长度大小,使其能容纳n个元素。 如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。原创 2017-10-30 19:39:11 · 1245 阅读 · 0 评论 -
C++ map lower_bound() upper_bound()
1.lower_bound() 算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。 ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)2.upper_bound() 算法返回一个非递减序列[first, last)中第一个大于val的位置。 Forward原创 2017-11-18 11:13:39 · 5617 阅读 · 0 评论 -
返回局部指针变量
返回值为数值时,返回局部变量可以,而返回值为引用或指针时,则存在风险。局部变量是存在于栈中的,函数被调用时先在栈中为变量申请空间,调用完成释放变量空间。函数在返回参数的时候是这样的,先把要返回的数放在寄存器eax中,然后回到主函数中取出eax中的数值放在变量里,所以这样是不涉及函数中变量地址的。如果要返回引用,也就是变量地址,那么它会把这个变量的地址放在eax中,(注意这个地址是位转载 2017-11-24 21:07:33 · 1311 阅读 · 0 评论 -
C++ for_each构造函数和析构函数的调用,仿函数,lambda
//for_each()调用三次析构函数 仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 有些功能的的代码,会在不同的成员函数中用到,想复用这些代码。 1)公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就原创 2018-01-06 13:28:43 · 847 阅读 · 0 评论 -
理解C++ dynamic_cast
在static_cast、dynamic_cast中介绍的不够详细,所以找了一些自己觉得不错的资料,如下:作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这里,不再讨论其他三种转换和C风格的转换转载 2018-01-19 21:29:28 · 879 阅读 · 0 评论 -
iterator源码分析
const_iteratorclass _Vector_const_iterator 中有成员using iterator_category = random_access_iterator_tag; using value_type = typename _Myvec::value_type; using difference_type = typename _M...原创 2019-08-31 19:51:01 · 466 阅读 · 0 评论