随笔分类 - C++
11
    
摘要:总结下cast的套路: TypeA a = xxx_cast<TypeA>(b); 操作符 作用 C++中对应的例子 C中对应的例子 static_cast 编译器隐式执行的任何类型转换都可以通过它来显式完成. double d = 1.1; char ch = static_cast<char>(
        阅读全文
                
摘要:有时对指针长度总是弄混淆,今天试验了把,总算有个明确的结论了. 指针就是地址,它的长度取决于编译程序的编译器,如果是32位,则指针长度为4字节.若是64位,则是8字节. #include<stdio.h> int main() { int i = 0; int *pi = &i; char c = 
        阅读全文
                
摘要:struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; s
        阅读全文
                
摘要:不仅定义了整数常量集,还把他们聚集成组。enum open_mode{output,input,append}; 枚举成员值可以不唯一。比如下面的point2w和point3d的值都是3.enum Points{point2d = 2, point2w,point3d = 3, point4w};不
        阅读全文
                
摘要:#include "stdio.h" #include "assert.h" int main() { char buff[32]; int nPid = getpid(); snprintf(buff, 32, "%d", nPid); //参数1:要被写入的字符串 参数2:写入的大小,防止写入大
        阅读全文
                
摘要:一.概述 linux中不区分进程和线程,都认为是个任务,都是创建一个task_struct.如何区分?线程是共享相同地址空间,而进程是独占地址空间. 多线程共享同一进程的地址空间 优点: 通信方便,可以通过全局变量. 缺点: 访问共享数据时需要考虑同步和互斥. 二.线程共享资源: 可执行的指令 静态
        阅读全文
                
摘要:1.当linux和Windows中,主线程以return 0结束时,程序会在主线程运行完毕后结束.2.当linux中,主线程以pthread_exit(NULL)作为返回值,则主线程会等待子线程.#include<stdio.h> #include<unistd.h> #include<pthrea
        阅读全文
                
摘要:一.背景 今天看到一篇文章(https://www.xuebuyuan.com/1691810.html),讲到主线程等待子线程执行完毕,如何判断的问题.作者一开始采用的是简单的Sleep操作,但这种操作不能够保证正确而且效率还比较低. 于是作者自己设计了判断子线程结束的方法,我也就实践了这个方法.
        阅读全文
                
摘要:使用格式: [infile] -o [outfile] [infile] 可以是源文件, 目标文件或者汇编文件;[outfile]可以是目标文件,可执行文件,预处理文件 其中[infile]和[outfile]可以是一个文件,也可以是一组文件. 如果不使用 -o 选项,那么将采用默认的输出文件 1.
        阅读全文
                
摘要:-c 只编译不链接,仅生成目标文件(.o) 可以同时编译多个文件 如果不加-c,则会进行链接操作. 例子: 定义两个源文件fun1.c和main.c //fun1.c #include"stdio.h" void fun1() { printf("this is fun1\n"); } //main
        阅读全文
                
摘要:一.背景 今天看了一篇有关volatile在多线程中使用的博客(自己对该博客的总结:https://i-beta.cnblogs.com/posts/edit;postId=11388620),里面的例子没有详细地进行代码实现.自己想要验证下这个问题,同时练习下多线程编程的招式,去专门实现了一下.发
        阅读全文
                
摘要:一.如果不加锁,会怎么样? 可能会发生数据竞争,造成数据错乱. 例子: 本来想要的结果n=0,但是执行发现n的值不为0,而且有多种取值.究其原因,是因为多个线程之间会发生数据竞争,导致CPU线程调度时出现问题,不能够保证线程内执行代码的原子操作.我发现string str = "hello";这一句
        阅读全文
                
摘要:一.总结 (1)子类对象中既包含父类中继承来的变量,还包括自身所特有的.当把子类对象去赋值给父类对象时,把两者共有的部分进行了赋值.(有篇文章反映了两者的内存关系:https://www.cnblogs.com/taiyonghai/p/6515979.html) (2)反之,父类对象赋值给子类对象
        阅读全文
                
摘要:一.区别介绍 静态创建对象指的是在栈上创建对象,比如A a;它会在对象的作用域结束后自动销毁. 动态创建对象指的是在堆上创建对象,然后栈上的指针指向创建的对象.比如A *pa = new A();它需要程序员手动delete掉.如果不进行delete操作,只能等到程序结束后,由OS来回收掉. 代码说
        阅读全文
                
摘要:1.可以使用{}来达到方便的作用. 比如下面的代码,如果不用{}的话,会提示v1重复定义的问题 int sz = 100; std::cout << "using reserve: \n"; { std::vector<int, NAlloc<int>> v1; v1.reserve(sz); fo
        阅读全文
                
摘要:一.背景 昨天脑袋有点发蒙,在.h中定义了一个全局变量CCriticalSection g_CriticalSection;然后就报了若干个LNK2005:重复定义的链接错误(单个cpp文件单独编译时不会发现问题,而链接时把把信息汇总,就会发现问题咯).原因是不应该在头文件中定义全局变量. 正确定义
        阅读全文
                
摘要:一.背景 之前知道对象结束生命时,会自动调用析构函数.如果类中存在动态数组时,会在析构函数中会对动态数组对应的指针进行delete操作.不过一直对动态对象的delete操作和析构函数之间的关系没有太多关注.直到最近在看delete这块知识时,发现了这样的表述 二.举例 下面的代码中,在main函数的
        阅读全文
                
摘要:1.指针delete后,赋为0的原因? (1)防止再次delete它? 既然删掉了,还会再用它吗?可能有不明显的调用? (2)它是野指针,指向的是被删除的内存。 哪有怎样呢? Ans:赋为0表明它不再指向任何对象。假如不赋为0,用户有可能会误调用,访问到未知的内容.而赋为0,即使被误调用,会直接抛出
        阅读全文
                
摘要:探索1: ME:: L, vector变量是存放在堆上还是栈上的?网上说法不一,我也没有找到权威的表述L: 堆、栈 和vector有啥关系?L: 你把它放哪里,它就在哪里ME: [分享]堆、栈的地址高低? 栈的增长方向? https://www.zhihu.com/question/36103513
        阅读全文
                
 
                    
                
 浙公网安备 33010602011771号
浙公网安备 33010602011771号