C与CPP
码海岛主
这个作者很懒,什么都没留下…
展开
-
c++ switch的一些神奇用法
一、switch作用域switch中,如果写成下面这样会报错switch(i) case 1: int a = 0; break; case 2: break;因为case中的变量属于整个switch块结构,编译器认为如果不执行case 1,a会未经初始化就使用,所以编译通不过,需要加一个作用域如下,将a的作用域局限在case 1中即可switch(i) case 1: { int a = 0; } break; case 2: break;二、swi原创 2020-08-28 15:05:43 · 2577 阅读 · 0 评论 -
用do while进行复杂的宏定义
在很多比较复杂的宏定义中,经常可以看到整个接口被一层do while(0)给包了起来#define Foo(x) do{\ printf("first statement\n");\ printf("second statement\n");\}while(0) 这样定义的是一个非复合语句,可以确保在类似下面这种情况if(xxx) Foo(x) else ... 可以顺利展开,展开后的结果被do while包了起来if(xxx) do { print原创 2020-07-20 19:15:16 · 340 阅读 · 0 评论 -
C++11多线程与并发控制
C++11中封装了一套跨平台的线程库以及配套的并发控制库,这里一起记录一下一、Thread库C++11中封装了一套线程库,位于thread文件中,具有基本的线程需要的各类函数。如下显示了一个基本的线程操作流程:#include <thread>#include <iostream>>using namespace std;void ThreadFunc...原创 2020-02-19 21:07:38 · 720 阅读 · 0 评论 -
C++静态成员变量的定义与初始化注意事项
静态(statis)变量只在第一次被调用时声明并初始化,此后保存在堆上。而对于类的静态成员来说,同样是所有类共享一个静态成员,需要注意的是静态成员的初始化如下面代码class A{ public: static int a; // static int a = 1; // ERROR};int A::a = 1;int main(){ cout &l...原创 2019-08-19 20:31:07 · 5045 阅读 · 4 评论 -
关于vs2015无法添加外部工程引用的解决办法
有时候,vs2015中右键项目,选择添加引用时,会没有显示,如下图:这时候解决办法也很简单,把项目属性->常规的“公共语言运行时支持”,按如下图设置:设为公共语言运行时支持,就能正常添加引用了...原创 2018-02-08 16:54:27 · 6845 阅读 · 0 评论 -
visual studio无法查看局部变…
这两天发现VS2013一直没法查看局部变量,最后发现,是解决方案那里选择的是Release而不是Debug,调回来之后一切OK。这一股蛋疼的感觉。。。原创 2017-09-05 12:36:28 · 281 阅读 · 0 评论 -
C++虚函数的内存管理
这几天在复习多态性和动态绑定,看到一篇不错的博文:https://blog.twofei.com/496/这里记录一下。动态绑定实现关键就在于C++的虚函数,虚函数的内存管理由虚函数表实现,下面几张摘自博文的图很好地说明了虚函数的内存:1、当子类没有虚函数时,直接采用父类虚函数表(虚函数表由指针vfptr指向),如果有虚函数,同名的会覆盖,不同名的接在后面[0][1]的后面。2、原创 2017-09-05 12:36:25 · 363 阅读 · 0 评论 -
c++使用杂录(一)
一、如何去掉string类的最后一个字符a[a.size()-1]='\0';二、去掉容器中重复的且长度大于n的字符串(n在之前给定)list_1.unique( [n](const string a,const string b){ returna==b&&a.size()>n; } );即:使用lambda表达式,如果相邻的两个字符串相等且长度大于n,则删掉。注意:要先用sort原创 2017-09-05 12:35:49 · 240 阅读 · 0 评论 -
C中struct(结构体)初始化的问题
在leetcode上做一道用struct作为链表节点的题目时,遇到了一次runtimeerror。后来排查原因,发现是在一次写了如下的语句:new_digit->next=(struct ListNode *)malloc(sizeof(structListNode));new_digit=new_digit->next;之后,没有对这个指针的成员进行初始化,当加入下面的初始化语句:原创 2017-09-05 12:33:45 · 766 阅读 · 0 评论 -
关于C中指针使用的注意事项
今天在leetcode刷题时,想着用一用很久没用过的C,于是就被教育了。。首先,在leetcode上连着出了两次编译错误,想了N久才猛然回忆起来,C中貌似是没有new的,要分配指针必须使用malloc变量,如:int *answer=new int[2]; //错,仅适合c++int *answer=(int*)malloc(sizeof(int)*2); //对然后原创 2017-09-05 12:33:42 · 894 阅读 · 0 评论 -
VS2010环境下用命令行处理cpp文件
今天尝试在VS2010用命令行编译程序,首先需要明确的是,VS2010命令行的程序编译指令是cl,不过不能直接运行C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin路径下的cl.exe,不然会提示找不到mspdb100.dll文件,这个是因为VS2010的环境配置问题,无法在系统自带的环境变量情况下完成编译。按照网上的方法...原创 2017-09-05 12:33:37 · 893 阅读 · 2 评论 -
C++ fstream的使用入门
最近考虑到要统计petuum中各个函数的运行时间,于是在源文件中加入计时语句,用timeval获取函数开始和结束的运行时间,然后用fstream输出到文件中。最开始用的是ofstream,调试几次之后,发现ofstream的打开方式默认是覆盖,无法通过指定参数来修改,即ofstream的打开文件方式只能是ofstream.open("filename");后面无法再添加指定参数。因此改为用原创 2017-09-05 12:33:34 · 341 阅读 · 0 评论