C++
文章平均质量分 60
imJaron
这个作者很懒,什么都没留下…
展开
-
C++的tie()函数
今天看C ++ primer 时,看到了ios::tie() 函数。不明白其含义,跟不知道作用。于是上网查了一下。cplusplus.com 给出的定义是:ostream* tie ( ) const; //返回指向绑定的输出流的指针。ostream* tie ( ostream* tiestr ); //将tiestr指向的输出流绑定的该对象上,并返回上一个绑定的输出转载 2017-01-02 21:05:17 · 3054 阅读 · 0 评论 -
cin、cin.get()、getline()
很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(),cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:转载 2017-01-02 20:53:29 · 443 阅读 · 0 评论 -
rdbuf()
我们使用STL编程的时候有时候会想到把一个流对象指向的内容用另一个流对象来输出,比如想把一个文件的内容输出到显示器上,我们可以用简单的两行代码就可以完成。 ifstream infile("test.txt");cout 上面的代码就把infile流对象中的流重定向到标准输出cout上,您可以在屏幕上看到test.txt的内容。下面的例子来自MSDN,清晰的描述了r原创 2017-01-03 15:47:05 · 1445 阅读 · 0 评论 -
预编译头文件 (precompiled header)
今天碰到了一个错误, "fatal error C1010: unexpected end of file while looking for precompiled header directive"。 研究了一下,结果如下。1. 这是因为启用了预编译的功能,关闭这个功能可以解决这个问题,但很可能带来编译效率的降低。这个功能主要是通过把不经常改动的预编译成一个PCH文件,然后下次编译则可以直原创 2017-01-01 13:07:58 · 588 阅读 · 0 评论 -
#pragma once
【1】#pragma once这个宏有什么作用?为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。【2】两者的使用方式有何区别?1 //方式一:2 #ifndef __SOMEFILE_H__原创 2017-01-01 15:00:16 · 285 阅读 · 0 评论 -
C++ 不用头文件直接定义类
class Person{public:void Test(){cout }};原创 2017-02-28 18:09:56 · 1523 阅读 · 0 评论 -
深入理解C++中变量的存储类别和属性
C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量、外部变量)动态存储方式与静态存储方式我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量在内存中的存在期间。这是从变量值存在的时间角度来分析的。存储期可以分为静态存储期(static storage d转载 2017-03-31 14:53:43 · 362 阅读 · 0 评论 -
static_cast、dynamic_cast、const_cast和reinterpret_cast总结
前言这篇文章总结的是C++中的类型转换,这些小的知识点,有的时候,自己不是很注意,但是在实际开发中确实经常使用的。俗话说的好,不懂自己写的代码的程序员,不是好的程序员;如果一个程序员对于自己写的代码都不懂,只是知道一昧的的去使用,终有一天,你会迷失你自己的。C++中的类型转换分为两种:隐式类型转换;显式类型转换。而对于隐式变换,就是标准的转换,在很多时候,不经意间就转载 2017-05-12 10:58:12 · 308 阅读 · 0 评论 -
Debug与Release版本的区别详解
Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Debug版本包括调试信息,所以要比Release版本大很多(转载 2017-05-27 21:40:52 · 376 阅读 · 0 评论 -
C++ STL,ATL,WTL之间的联系和区别
STL即 Standard Template Library (标准模板库)STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、co转载 2017-05-27 22:02:52 · 370 阅读 · 0 评论 -
指针的类型信息保存在哪里?
int* pnVar;和char* pcVar;这两个指针在做加法的时候,计算机怎么知道是加1个还是4个byte 对应的汇编代码:12345678pnVar++;00413031 mov eax,dword ptr [pnVar]转载 2017-06-01 13:20:42 · 816 阅读 · 0 评论 -
C++面试中常被问的sizeof问题总结
本文参考http://www.cppblog.com/w57w57w57/archive/2011/08/09/152845.html又根据自己常被问及的问题和常犯的一些错误对其进行了一些补充。sizeof的使用非常简单:求对象或者类型的大小。然后sizeof又非常复杂,它涉及到很多特殊情况。(1) sizeof是操作符,不是函数。MSDN:The转载 2017-06-01 13:21:40 · 601 阅读 · 0 评论 -
C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2017-06-06 12:40:56 · 236 阅读 · 0 评论 -
sizeof和sizeof(string)的问题
今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:string strArr1[]={"Trend", "Micro", "Soft"};sizeof(strArr1)=12转自:http://apps.hi.baidu.com/shar转载 2017-06-02 16:06:19 · 530 阅读 · 0 评论 -
sizeof(string)的问题(很经典)
今天看到一个代码,刚开始没有看明白,代码如下:[cpp] view plain copy print?"font-size:14px;">#include #include using namespace std; void main() { string a="www.ok2002.com"; strin转载 2017-06-02 16:08:59 · 315 阅读 · 0 评论 -
clang编译器简介
什么是clang编译器?clang是LLVM编译器工具集的一个用于编译C、C++、Objective-C的前端。LLVM项目的目标是提供一个GNU编译器套装(gcc)的替代品,由苹果公司的赞助开发,其源代码授权采用的是类BSD的伊利诺伊大学厄巴纳-香槟分校开源码许可。clang编译器的优势与劣势相比于gcc,clang具有如下优点:编译速度更快:在某些平台上,cla转载 2017-06-28 18:06:54 · 1600 阅读 · 0 评论 -
C++构造函数和析构函数中抛出异常的注意事项
从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数和析构函数中尽量不要抛出异常,万不得已,一定要注意防止资源泄露。在析构函数中抛出异常还要注意栈展开带来的程序崩溃。1.构造函数中抛出异常在C++构造函数中,既需要分配内存,又需要抛出异常时要特别注意防止内存泄露的情况发生。因为在构造函数中抛出异常,在概念上将被视为该对象没有被成功构造,因此当前对象的析构转载 2017-07-04 21:26:05 · 581 阅读 · 0 评论 -
为什么C++编译器不能支持对模板的分离式编译
首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,即windows可执行文件)文件格式,并且本身包含的就已经是二进制码,但是不一定能够执行,因为并不保证转载 2017-06-27 22:39:54 · 299 阅读 · 0 评论 -
C++ 获取文件夹下的所有文件名
获取文件夹下所有的文件名是常用的功能,今天再一次有这样的需求,所有就在网上查找了很多,并记下以供后用。原文:http://blog.csdn.NET/cxf7394373/article/details/7195661原文:http://qiaoxinwang.blog.163.com/blog/static/86096452010612139172/头文件:#includ转载 2017-07-29 22:47:17 · 598 阅读 · 0 评论 -
string的find和find_first_of的区别
今天遇到个bug,原来是在查找子串时调用了find_first_of,导致字符串替换出现问题。现将find和find_first_of的区别与几种使用形式介绍如下find是查找子串,而find_first_of类似于模式匹配,只要与其中的一个字符匹配就行。find有四种使用形式。1、size_type find(const basic_string& str, si原创 2017-07-30 09:18:35 · 855 阅读 · 0 评论 -
虚表(C++)virtual table
C++ 中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技 术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚 函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里转载 2017-07-09 21:05:19 · 1172 阅读 · 0 评论 -
C++11特性之override和final关键字
C++11之前,一直没有继承控制关键字。禁用一个类的进一步衍生是可能的但也很棘手。为避免用户在派生类中重载一个虚函数,你不得不向后考虑。C++ 11添加了两个继承控制关键字:override和final。override确保在派生类中声明的重载函数跟基类的虚函数有相同的签名。final阻止类的进一步派生和虚函数的进一步重载。虚函数重载一个派生类可以重载在基类中声明的成员函数转载 2017-07-09 22:45:20 · 703 阅读 · 0 评论 -
C++中Override
1 公有继承 公有继承包含两部分:一是 "接口" (interface),二是 "实现" (implementation) 基类 Shape 中,三个成员函数,代表三种继承方式:class Shape {public: virtual void Draw() const = 0; // 1) 纯虚函数 virtual void Erro转载 2017-07-10 09:13:46 · 492 阅读 · 0 评论 -
C++ 的MFC 和ATL 及COM 是什么?
一、什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个输助软件开发包,MFC作为与VC++血肉相连的部分转载 2017-08-17 12:45:50 · 2076 阅读 · 0 评论 -
关于C++中的虚拟继承的一些总结
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:p原创 2017-08-12 14:32:12 · 194 阅读 · 0 评论 -
C++ sizeof的使用总结
说明:以下代码在VS2008中通过,在32位操作系统下。1. 定义sizeof是一个操作符(operator)。其作用是返回一个对象或类型所占的内存字节数。其返回值类型为size_t。(size_t在头文件stddef.h中定义,它依赖于编译系统的值,一般定义为 typedef unsigned int size_t;)2. 语法sizeof有三种语法形原创 2017-08-12 20:45:24 · 267 阅读 · 0 评论 -
C++中static、const、static const修饰变量作用详解
C++中类的变量可以通过static、const、static const来修饰,不同的修饰在不同的情况下表示不同的含义。下面我们来详细解读一下他们的用处。首先我们需要先了解程序运行期间的内存分区:1.代码区:存放CPU指令码。2.常量区:存放只读常量,该区只读,不可写。3.静态区:存放静态变量。该区在程序编译完成后就决定了其大小,程序运行期间该区的大小不会变。该区转载 2017-07-28 22:51:50 · 1212 阅读 · 0 评论 -
C++技巧之断言Assert
断言的应该是一种编程的常见技巧。我所应用的断言有两种,一种是动态断言,即大家所熟知的C标准库的assert()宏,一种是C++中的静态断言,即在编译期间检查。 1)动态断言:assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );原创 2017-08-14 09:26:05 · 399 阅读 · 0 评论 -
C++之static及其作用域
一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个全局变量和静态全局变量的例子,例如,在文件A中定义静态全局变量 i 和全局变量 j : [cpp] view plain copy#include using namespace std;转载 2017-07-29 09:52:23 · 829 阅读 · 0 评论 -
有static变量的namespace被多个cpp包含
有如下三个文件header.h[cpp #pragma once namespace NS1 { static int var = 10; } void print_var(); src.cpp[cpp] #include #include "header.h" void print_va原创 2017-07-29 10:14:07 · 496 阅读 · 0 评论 -
_variant_t 数据类型介绍
_variant_t 和 _bstr_t 这两个类分别用于封装并管理 VARIANT 和 BSTR 这两种数据类型,VARIANT 和 BSTR 这两种类型是 COM 中使用的数据类型。为了将C++中的变量应用到ADO编程中,只能进行数据类型的转换。通过 _variant_t 和 _bstr_t 这两个类,就可以方便的把C++类型变量转换成COM中的变量了。_variant_t原创 2017-08-14 13:44:39 · 1882 阅读 · 0 评论 -
DLL编程的导入导出,__declspec(dllimport),__declspec(dllexport)
在Windows DLL编程时,可使用__declspec(dllimport)关键字导入函数或者变量。 __declspec(dllimport),函数的导入 当你需要使用DLL中的函数时,往往不需要显示地导入函数,编译器可自动完成。但如果你显示地导入函数,编译器会产生质量更好的代码。由于编译器确切地知道了一个函数是否在一个DLL中,它就可以产生更好的代码,不再需转载 2017-08-14 13:56:18 · 307 阅读 · 0 评论 -
__declspec(dllimport)的作用
是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。转载 2017-08-14 13:58:34 · 246 阅读 · 0 评论 -
class _declspec(dllexport) class_name与class _declspec(dllimport) class_name的配套使用
我们在创建动态链接库时,必须要使用到class _declspec(dllexport) class_name;class _declspec(dllimport) class_name这两个东西怎样合理搭配使得两者配合最好呢?而且使用的时候更方便:接下来我将导出一个类 add首先看看它的头文件:[cpp] view plain copy原创 2017-08-14 14:12:09 · 608 阅读 · 0 评论 -
tlb、tlh和tli文件的关系
tlb文件:com类型库文件。在需要使用对应com类的模块里,“#import ...*.tlb”使用之。tlh、tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件。因为odl和tlb并不是C++标准的东东,有必要把它们翻译成标准的C++类型,使得C++开发者可以使用。相信vb和j++也会把tlb翻译成自己语言兼容的类型描述信息。tlh相当于类型申明(头文件),tli相当于定义原创 2017-08-14 15:35:57 · 1704 阅读 · 0 评论 -
深入 char * ,char ** ,char a[ ] ,char *a[] 内核
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。转载 2017-08-25 09:43:42 · 205 阅读 · 0 评论 -
char数组与char指针
1、以字符串形式出现的,编译器会在结尾自动添加\0,思考,为什么? 存在的C语言方法,如strlen(s),计算字符串的长度,其中s指针。strlen要计算字符串长度,必须知道哪里是结尾,因此使用\0表示结尾。只有字符数组才有\0的概念,其它类型(int)的数组没有这个概念。因为其他类型的数组或者指针,没有strlen这种方法。 那么问题来了,int数组如何计算长度呢?如int转载 2017-08-25 09:44:08 · 797 阅读 · 0 评论 -
char数组 、char指针与字符串常量的比较
数组不是基本类型,不能直接参与比较,数组与字符串及字符指针与字符串比较其实比较的是二者的地址。例:[cpp] view plain copyint isequiv(char *t) { if (t == "char") return 1; else return 0; } int main()转载 2017-08-25 09:45:49 · 1365 阅读 · 0 评论 -
【算法】字符串的全排列和组合算法
原文地址:http://blog.csdn.net/hackbuteer1/article/details/7462447全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。 首先转载 2017-08-25 09:46:11 · 300 阅读 · 0 评论 -
union内嵌struct用法
众所周知,union为联合体,struct为结构体。下面根据实例谈谈用法[cpp] view plain copy#include #include void main() { union{ /*定义一个联合*/ char i[6];转载 2017-09-04 09:11:49 · 2904 阅读 · 0 评论