C/C++
Kaycsdner
Nothing is impossible for a willing heart!!!
展开
-
C++声明、定义、类的定义、头文件作用、头文件重复引用
转载至:点击打开链接C++声明、定义、类的定义、头文件作用、头文件重复引用,不具名空间转自:http://www.cnblogs.com/rocketfan/archive/2009/10/02/1577361.html 首先说我的补充:(对声明和定义的深入理解和总结)关于声明和定义,具体指类、函数和变量(或对象)的声明和定义。转载 2016-08-31 13:59:19 · 7453 阅读 · 0 评论 -
Qt中local and expressions无法查看当前栈变量
前几天在开发过程中发现一个问题,那就是Qt中local and expressions无法查看当前栈变量。在升级到gcc 4.8.1版本之前,debug时在watch window是可以看到变量值得。很有可能就是升级过后,gcc版本与gdb版本不匹配造成的。ubuntu12.04自带的gdb是7.4,升级gdb可以解决问题,当gcc升级到4.8.1时,匹配的gdb需要升级到7.6.1,否则会出现符原创 2017-03-01 20:47:59 · 1449 阅读 · 0 评论 -
C++ - 算法(algorithm) 的 谓词(predicate) 详解
转载至:http://blog.csdn.net/caroline_wendy/article/details/15378055算法谓词, 即标准库算法传递的参数, 可以指定算法的操作, 如std::sort, 默认是从小到大, 通过谓词可以修改从大到小.本文包含基本的5种谓词模式: 函数,函数指针,lambda表达式,函数对象,库定义的函数对象. 1. 函数(fu转载 2017-04-08 11:24:52 · 2783 阅读 · 1 评论 -
(位运算使用技巧)A summary: how to use bit manipulation to solve problems easily and efficiently
参考至:https://discuss.leetcode.com/topic/50315/a-summary-how-to-use-bit-manipulation-to-solve-problems-easily-and-efficientlyWIKIBit manipulation is the act of algorithmically manipulating bits转载 2017-04-09 12:00:52 · 430 阅读 · 0 评论 -
c++11新特性中unordered_map与传统map比较
unordered_map是很早就知道的概念,但却一直没有认真去理解,单单以为它是Boost库里对map的实现,今天在做Leetcode的题目的时候,发现了使用它的优越性,索性翻开书,并查一查资料,把它大致搞个清楚,省的以后还要再查再找,浪费时间。unordered_map是C++Boost库中的内容,这里的unordered翻译成“无序”。但它并不是完全的“无序”的概念,而是散列转载 2017-04-02 22:15:30 · 1998 阅读 · 0 评论 -
C++头文件的若干说明和const对象定义
转载至:http://blog.csdn.net/yipiantiandi/article/details/5822564在使用C++进行程序开发的时候,有个常识我们很熟悉,就是把类的定义写在.h文件中,把类的具体实现写在.cpp文件中。这毫无疑问是对的。但我们很少去思考为什么要这样做,本文结合自己的学习体会,对头文件及const对象的定义进行一些说明。 1。为什么要使用头文件使用转载 2017-05-17 17:57:30 · 388 阅读 · 0 评论 -
c++之函数对象
转载至:http://blog.csdn.net/wuzhekai1985 http://blog.csdn.net/wuzhekai1985/article/details/6658940可以为类类型的对象重载函数调用操作符,定义了调用操作符的类,其对象称之为函数对象(function object),即它们的行为类似函数的对象。STL是C++标准库的重要组成部分之一,它不仅是一转载 2017-04-27 14:39:54 · 363 阅读 · 0 评论 -
C++类型转换总结
参考:http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.htmlC风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。sta转载 2017-05-21 12:28:30 · 212 阅读 · 0 评论 -
左值引用(&)以及右值引用(&&)(原创+转载)
话题一:到底引用是什么?底层实现原理是什么?带着这几个问题我们分析一下下面的代码:int _tmain(int argc, _TCHAR* argv[]){ int x = 1; int y = 2; int &b = x;#ifdef _DEBUG printf("&x=%x,&y=%x,&b=%x,b=%x\n", &x, &y, &y-3, *(&y - 3));#else原创 2017-07-15 18:07:56 · 491 阅读 · 0 评论 -
可变参数实现log打印
实现步骤如下: 1. 函数原型中使用省略号; 2. 函数定义中创建一个va_list变量; 3. 初始化va_list变量; 4. 访问参数列表; 5. 完成清理工作; 上述步骤的实现需要使用到四个宏:va_list、va_start(va_list, arg)、va_arg(va_list, type)、va_end(va原创 2017-07-22 17:27:02 · 2403 阅读 · 0 评论 -
c++对象内存布局
转载:http://blog.csdn.net/haoel/article/details/3081328/转载:http://www.cnblogs.com/jerry19880126/p/3616999.html第一篇文章主要是介绍含虚函数的普通继承,文字标红处为错误,应该为:“[4] CChild:: h_child()”第二篇主要是讲了虚继承的内存布局,还介绍了如何使用vs查看转载 2017-08-07 22:31:56 · 288 阅读 · 0 评论 -
std::async在gcc和vc不同编译器下的不同表现(可能会阻塞)
最近由于项目的需要,在学习c++11中的std::async,想在项目中直接利用其异步操作的特性,而不是thread。但是该方法却在不同的编译器下有着不同的表现。实验环境一:操作系统:ubuntu 12.0.4 32位编译器:gcc 5.4.1源码:#include #include #include #include #include using namespace原创 2017-07-23 18:35:52 · 1919 阅读 · 1 评论 -
深拷贝和浅拷贝
c++编译器默认情况下会生成拷贝构造函数和赋值操作符用于新对象的构造和赋值。拷贝构造函数和赋值操作符分为两种:位拷贝(bitwise copy)和成员拷贝(member copy)。当c++类不展现bitwise copy semantic时不会按照默认的Bitwise copy,以下四种情况不展现bitwise copy semantic:1)如果一个类没有拷贝构造函数,但是含有一个类类型的原创 2017-08-19 22:17:45 · 281 阅读 · 0 评论 -
c++类型转换
参考:http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.htmlhttp://www.cnblogs.com/ider/archive/2011/08/01/cpp_cast_operator_part5.htmlc++中有四种运算符用于类型转换:const_cast,字面上理解就是去const属性。sta转载 2017-08-13 11:01:26 · 409 阅读 · 0 评论 -
C++'s most vexing parse
转载至:http://www.zkt.name/c-s-most-vexing-parse/最近同事在使用C++的时候遇到一个诡异的问题,初始化一个对象的时候构造函数没有被调用。类似的代码如下:#include class A { public: A(const std::string& name){ std::cout std::endl;转载 2017-08-27 11:20:33 · 381 阅读 · 0 评论 -
C++之TR1::function
转载至:http://blog.csdn.net/u013696062/article/details/40891973Tr1::function的介绍它是一个类模板,类的成员变量是一个函数指针。可以把它看作一个智能函数指针(和shared_ptr智能指针对比着理解)。 一. 头文件#include 二. 使用[cpp] view plain c转载 2017-01-20 22:10:33 · 419 阅读 · 0 评论 -
callback 回调函数
file a.h#ifndef A_H#define A_H#include "B.h"#include class A{public: A(){ m_b = new B(); m_b->SetCallback(this,callBack); m_b->Loop(); } static void callB原创 2017-01-16 15:26:02 · 2708 阅读 · 0 评论 -
c++ STL中容器迭代器失效
参考:http://www.cnblogs.com/yuanshuang/p/5777905.htmlhttp://blog.csdn.net/aa838260772/article/details/39678187序列性容器::(vector和list和deque) erase迭代器不仅使所指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,转载 2016-11-23 14:07:29 · 3270 阅读 · 1 评论 -
引用的本质
转载至:点击打开链接一、引用的本质是什么说到引用,一般C++的教材中都是这么定义的:1,引用就是一个对象的别名。2,引用不是值不占内存空间。3,引用必须在定义时赋值,将变量与引用绑定。那你有没有想过,上面的定义正确吗?编译器是如何解释引用的?这里先给出引用的本质定义,后面我们再进一步论证。1,引用实际是通过指针实现的。2,转载 2016-08-31 14:26:59 · 584 阅读 · 0 评论 -
编译器做的那些事儿
转载至:点击打开链接1. 怎么就在编译时确定了 sizeof 的大小了?2.编译时确定的东西?3.运行时确定的东西? C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最转载 2016-08-21 21:58:32 · 1677 阅读 · 0 评论 -
c++中extern关键字详解
参考至:点击打开链接1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时转载 2016-08-22 20:27:34 · 286 阅读 · 0 评论 -
编译过程和符号表重定位问题、静态和动态链接
编译过程和符号表重定位问题:转载至:点击打开链接对于代码的编译问题千头万绪从何说起呢,首先来说一下计算机是如何处理应用程序的,实质上应用程序是通过操作系统来应用机器指令操控硬件设施完成各种任务的,就从编译的环节开始谈起吧,众所周知,程序开发人员所写的代码实际上计算机是没有办法去认识的,那么就必须通过编译将其转换为计算机可以认识的机器指令,在有操作系统根据具体指令从硬件上分配内存处理程序段。转载 2016-08-27 10:05:57 · 6647 阅读 · 0 评论 -
inline的使用
参考至:点击打开链接inline是加在实现上,就算加在声明上,编译器也会忽略掉。内联展开是在编译时进行的,只有链接的时候源文件之间才有关系。所以内联要想跨源文件必须把实现写在头文件里。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。C++里,inline是定义时有效的特性,声明时写是没用的,所以C++里内联函数一般就是你在类的声明里定义的函数,或者类的声转载 2016-09-24 11:08:15 · 470 阅读 · 0 评论 -
c++模板函数声明和定义分离
转载至:点击打开链接c++模板不支持分离编译, 把你模板类的声明和实现放到.h文件里面 。按照这个说的把.h和.cpp文件合并后,果然可以了。但是为什么呢,为什么模板就不支持分离编译?---继续google ing搜到了如下文章(文章原文链接:http://blog.csdn.net/bichenggui/article/details/4207084):首先,一个转载 2016-09-24 12:32:39 · 10521 阅读 · 0 评论 -
减少编译时间:pointer to implementation(Impl设计模式)
参考:点击打开链接PIMPL(Private Implementation 或 Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏。1)降低模块的耦合。因为隐藏了类的实现,被隐藏的类相当于原类不可见,对隐藏的类进行修改,不需要重新编译原类。2)降低编译依赖,提高编译速度。指针的大小为(32位)或8(64位),转载 2016-09-18 22:12:31 · 2917 阅读 · 0 评论 -
头文件的重复包含和变量的重复定义
转载至:点击打开链接在c或c++中,头文件重复包含问题是程序员必须避免的问题,也是很多新手容易犯错的问题。为什么要避免头文件重复包含呢? 1.我们知道在编译c或c++程序时候,编译器首先要对程序进行预处理,预处理其中一项工作便是将你源程序中#include的头文件完整的展开,如果你有意或无意的多次包含相同的头文件,会导致编译器在后面的编译步骤多次编译该头文件,工程代码量小还转载 2016-09-24 15:56:22 · 18981 阅读 · 1 评论 -
virtualbox ubuntu14.04共享文件夹
参考:http://www.cnblogs.com/findumars/p/5554706.html之前已经搞定可以自动共享文件夹了,但是现在发现无法去访问,非root用户下,使用“ls /media/sf_bak”提示没有权限,当然如果切换到root,是可以的。【解决过程】1、把普通用户名加入到vboxsf之中。因为你的用户名不在vboxsf这个用户组。下面添加boarm转载 2016-10-23 14:49:34 · 1256 阅读 · 0 评论 -
qt 4.8.6 ubuntu14.04环境安装
转载至:点击打开链接参考官方文档:step 1 安装依赖库,在安装说明的最下面sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev libxft-dev libxi-dev lib转载 2016-10-23 14:42:12 · 2058 阅读 · 0 评论 -
c++中关于char型变量与字符串地址的输出
参考至:http://blog.csdn.net/nitpicking/article/details/45364403在c里面如果指针是一个基本数值型int ,foalt ,long等,如果输出里有cout 其中ptr是指针的名,则输出的值是指针的地址,如果是char * (char指针) 则输出的是char指针的值。 在C++中,熟悉in转载 2016-10-12 21:25:14 · 6192 阅读 · 0 评论 -
Qt控件及事件处理
1. Qt有三个主要的布局管理器类:QHBoxLayout:在水平方向上排列窗口部件(从左到右)QVBoxLayout:在竖直方向上排列窗口部件(从上到下)QGridLayout:把各个窗口部件排列在网格中QFormLayout:常使用addRow函数,布局完成后一边是lable,一边是spinBox /lineEdit / ComboBox等Qt最常见的做法是先声明所需原创 2016-10-05 11:51:00 · 4287 阅读 · 0 评论 -
ubuntu环境安装git
本文参考ubuntu环境安装git1. 安装Git1.1 Ubuntu12.04下可以使用apt-get方式安装,也可以下载源代码安装【1】,我们这里使用apt-git安装。但由于直接使用 sudo apt-get install git 安装的版本较老,因此我们参考【2】中给出的PPA源。sudo add-apt-repository ppa:git-core/p转载 2015-11-29 21:20:07 · 469 阅读 · 0 评论 -
声明
本博客所有原创文章都有部分内容摘至各个参考书籍,无任何盈利目的,纯属学习交流!原创 2016-11-29 22:43:56 · 209 阅读 · 0 评论 -
ubuntu 14.04 Clang编译安装,libclang解析c++代码
注意事项:1. 内存8G以上,我当时4G内存,编译debug版就出现了内存耗尽的情况;2.最好不要编译debug版本,我编译到83%左右时已经耗尽30多G磁盘空间,并且会产生很大的编译日志文件(提示12G左右),同样提示内存不足针对内存耗尽的问题,当时也在网上找了很久,来自于stackoverflow(https://stackoverflow.com/questions/25原创 2017-11-01 21:35:18 · 4277 阅读 · 0 评论