C/C++
d04421024
这个作者很懒,什么都没留下…
展开
-
为什么C++中千万不要返回局部对象或变量的引用和指针
大家都知道一个常识:“C++中千万不要返回局部对象或变量的引用和指针”。既然所有C++权威的书上都要求“一定不要返回局部对象或变量的引用和指针”,那为什么C++编译器不从语法上直接禁掉这种用法。如果只是建议的话,那么“返回局部对象或变量的引用和指针”是否有用武之地呢?(从理论上来讲,我认为这种做法似乎总是错误的,原因大家都知道。)例1:class CComplex{publ转载 2012-03-04 11:30:56 · 2781 阅读 · 0 评论 -
在C++中explicit关键字
<br />在C++中explicit作用:<br />explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。<br />explicit使用注意事项:<br />*explicit 关键字只能用于类内部的构造函数声明上。<br />*explicit 关键字作用于单个参数的构造函数。<br />* 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换<br /> <br />如下面所示原创 2010-06-08 16:35:00 · 387 阅读 · 0 评论 -
sizeof(struct)的内存分配
<br />请看下面的结构:<br /> struct MyStruct { double dda1; char dda; int type; };<br />对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?<br />也许你会这样求:sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13<br />但是当在VC中测试上面结构的大小时,你会发现sizeof(M转载 2010-06-03 15:41:00 · 489 阅读 · 0 评论 -
strlen和sizeof
<br />1.sizeof返回值类型为size_t,在<stddef.h>中有定义:typedef unsigned int size_t。该类型保证能容纳实现所建立的最大对象的字节大小。 <br />2.sizeof是算符,strlen是函数。 <br />3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''/0''结尾的。 <br />sizeof还可以用函数做参数,比如: <br />short f(); <br />printf("%d/n", sizeof(f()转载 2010-06-03 14:23:00 · 598 阅读 · 0 评论 -
C++中的文件输入/输出
标题 C++中的文件输入/输出(1):你的第一个程序 Kusk(翻译) 关键字 C++ 文件 FileI/O 入门 出处 http://www.cpp-home.com/FileIO_tutorial.php C++中的文件输入/输出(1)原作:Ilia Yordanov, loobian@cpp-home.com 简介本教程将以C++最基本的文件I/O(输出/输转载 2010-05-19 10:11:00 · 748 阅读 · 0 评论 -
C++ sizeof 使用规则及陷阱分析
1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type s转载 2010-05-17 09:52:00 · 382 阅读 · 0 评论 -
C/C++ 中的移位操作拾遗
引言最近笔者一直在做JPEG的解码工作,发现用完全使用哈夫曼树进行解码比较费时,而使用表结构存储编码和值的对应关系比较快捷,但是也存在比较难处理的地方,比如解码工作通常是以位为单位的操作,这里必然会涉及到移位操作,而笔者之前对位的操作很少,经验很欠缺,经过这次历练终于发现了一个自己曾经忽视的东西,那就是C/C++中的移位操作容易出错的情况。1、什么样的数据类型可以直接移位char、sh转载 2010-05-17 09:42:00 · 670 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系(转)
Sizeof与Strlen的区别与联系(转)1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以/0结尾的。sizeof还可以用函数做参数,比如: short f转载 2010-05-12 16:53:00 · 328 阅读 · 0 评论 -
深入C++的new
<br />“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。<br />new的过程<br />当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:<br />class A<br />{<br /> int i;<br />public:<br />转载 2010-06-28 16:47:00 · 466 阅读 · 0 评论 -
cout格式输出的使用
<br />控制符是在头文件iomanip.h中定义的对象。 使用前必须把iomanip.h包含进来<br /> 1. I/O的书写格式<br /> I/0流是输入或输出的一系列字节,当程序需要在屏幕上显示输出时,可以使用插入操 作符“<<”向cout输出流中插入字符。例如:<br /> cout<<”This is a program./n";<br /> 当程序需要执行键盘输入时,可以使用抽取操作符“>>”从cin输人流中抽取字符。例如:<br /> int myAge;<br /> c转载 2010-06-11 15:16:00 · 1494 阅读 · 0 评论 -
cin
<br />很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:<br />程序1:<br />#include <iostream><br />using namespace s转载 2010-06-11 17:19:00 · 1651 阅读 · 1 评论 -
尽量使用初始化而不要在构造函数里赋值
尽量使用初始化而不要在构造函数里赋值<br /> <br />看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。<br />template<class t><br />class namedptr {<br />public:<br /> namedptr(const string& initname, t *initptr);<br /> ...<br />private:<br /> string name;<br /> t *ptr;<br />};<br />(因为有转载 2010-10-18 10:11:00 · 874 阅读 · 0 评论 -
windows内存管理
<br />(1)有三种方法:虚拟内存,内存映射文件,内存堆栈。 <br /> 虚拟内存是将页文件加载到内存,适用于比较大的对象或结构;<br /> 内存映射文件是将磁盘上文件加载到内存,适用于大文件和单机的进程间内存共享;<br /> 堆栈就是动态的分配内存,适用于小对象的创建。 <br /> 这些在windows核心编程中都描述得很详细的。 <br /> (2) 当进程要读自己的虚拟地址空间中的数据时 <br /> if(数据在物理内存中) <br /> { <br />原创 2010-10-18 15:28:00 · 616 阅读 · 0 评论 -
把类的析构函数写成虚函数的用意
Cpp代码 #include class Base { public: Base() { mPtr = new int; } ~Base() { delete mPtr; coutclass Base { public: Base() { mPtr = new int; } ~Base() { delete mPtr; cout转载 2010-10-14 09:28:00 · 566 阅读 · 0 评论 -
常对象和常函数的关系 const
(1) 常对象用const修饰的对象叫对象常量,其格式如下:〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。 例:分析下列错误的地方,说明理由;#includeclass Point{ int x, y;public:Point(int a, int b) { x=a; y=b;}Void MovePoint( int a, int b){ x+=a; y+=b;}Void print(){ cout};void main(转载 2010-10-12 19:11:00 · 583 阅读 · 0 评论 -
sprintf、strcpy 及 memcpy 函数
<br />这些函数的区别在于 实现功能 以及 操作对象 不同。<br />strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。<br />sprintf 函数操作的对象 不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。<br />memcpy 函数顾名思义就是 内存拷贝,实现 将一个 内存原创 2010-09-28 14:23:00 · 838 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
<br />为了避免同一个文件被include多次<br /><br />1 #ifndef方式<br />2 #pragma once方式<br /><br />在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。<br /> 方式一:<br /> #ifndef __SOMEFILE_H__<br /> #define __SOMEFILE_H__<br /> ... ... // 一些声明语句<br /> #endif<br /转载 2010-09-08 17:04:00 · 448 阅读 · 0 评论 -
vector类中的构造函数
<br />向量容器使用动态数组存储、管理对象。因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素。在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此。然而在数组末端插入元素却很快。<br />实现向量容器的类名是vector(容器是类模板)。包含vector类的头文件名是vector。所以,如果要在程序里使用向量容器,就要在程序中包含下面语句:<br />#include <vector><br />此外,在定义向量类型对象时,必须指定该对象的类型,因为vector类是一转载 2010-06-23 10:10:00 · 10173 阅读 · 1 评论 -
Boost线程简介(转自Boost中文站)
Boost线程简介(转自Boost中文站)<br />C++ Boost Thread 编程指南0 前言1 创建线程2 互斥体3 条件变量 4 线程局部存储5 仅运行一次的例程6 Boost线程库的未来 7 参考资料:0 前言标准C++线程即将到来。CUJ预言它将衍生自Boost线程库,现在就由Bill带领我们探索一下Boost线程库。<br />就在几年前,用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务 服务器在单独转载 2010-06-25 15:56:00 · 805 阅读 · 0 评论 -
程序在内存中运行的奥秘
<br />内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存管理的重要性都是不言而喻的。我会在接下来的几篇文章通过计算机的实际运行过程谈谈内存管理,当然在必要的时候我也会从底层原理去阐释这个问题。我们提到的概念是不局限于平台特性的通用概念,不过为了阐述这些概念我们选取的实例大多来源于Linux和基于x86架构的32位Windows操作系统。这篇文章,我们首先来看看程序是如何使用内存的。<br /> <br /> 多任务操作系统中,每一个进程都有它自己的内存“沙盒”。所谓“沙盒”,是指虚拟地址转载 2010-06-25 16:12:00 · 804 阅读 · 0 评论 -
不能将参数 1 从“std::string”转换为“const wchar_t *”
string pn;fstream iof;iof.open(pn,ios::in);open不能将参数 1 从“std::string”转换为“const wchar_t *”iof.open(pn.c_str(),ios::in);原创 2010-04-21 22:01:00 · 6209 阅读 · 0 评论 -
VC++动态链接库编程之DLL典型实例
动态链接库DLL实现了库的共享,体现了代码重用的思想。我们可以把广泛的、具有共性的、能够多次被利用的函数和类定义在库中。这样,在再次使用这些函数和类的时候,就不再需要重新添加与这些函数和类相关的代码。具有共性的问题大致有哪些呢?笔者归纳如下: (1)通用的算法 图像处理、视频音频解码、压缩与解压缩、加密与解密通常采用某些特定的算法,这些算法较固定且在这类程序中往往经常被使用。 (2转载 2010-01-15 17:01:00 · 548 阅读 · 0 评论 -
VC++动态链接库编程之DLL木马
从前文可知,DLL在程序编制中可作出巨大贡献,它提供了具共性代码的复用能力。但是,正如一门高深的武学,若被掌握在正义之侠的手上,便可助其仗义江湖;但若被掌握在邪恶之徒的手上,则必然在江湖上掀起腥风血雨。DLL正是一种这样的武学。DLL一旦染上了魔性,就不再是正常的DLL程序,而是DLL木马,一种恶贯满盈的病毒,令特洛伊一夜之间国破家亡。 DLL木马的原理 DLL木马的实现原理是编程者在DLL转载 2010-01-15 17:03:00 · 512 阅读 · 0 评论 -
VC++动态链接库编程之MFC扩展 DLL
前文我们对非MFC DLL和MFC规则DLL进行了介绍,现在开始详细分析DLL的最后一种类型――MFC扩展DLL。 6.1概论 MFC扩展DLL与MFC规则DLL的相同点在于在两种DLL的内部都可以使用MFC类库,其不同点在于MFC扩展DLL与应用程序的接口可以是MFC的。MFC扩展DLL的含义在于它是MFC的扩展,其主要功能是实现从现有MFC库类中派生出可重用的类。MFC扩展DLL使用MF转载 2010-01-15 17:00:00 · 454 阅读 · 0 评论 -
VC++动态链接库编程之非MFC DLL
4.1一个简单的DLL 第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数。 如图6,在VC++中new一个Win32 Dynamic-Link Library工程dllTest(单击此处下载本工程)。注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是第5、6节要讲述的转载 2010-01-15 16:58:00 · 342 阅读 · 0 评论 -
关于malloc和free函数的用法
关于malloc和free函数的用法标签:malloc free函数 用法 总结 个人总结在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个转载 2009-10-12 23:54:00 · 744 阅读 · 1 评论 -
WNDCLASS
WNDCLASS是一个由系统支持的结构,用来储存某一类窗口的信息,如ClassStyle,消息处理函数,Icon,Cursor,背景Brush等。也就是说,CreateWindow只是将某个WNDCLASS定义的窗体变成实例。 要得到某一窗口的WNDCLASS数据,可以用GetClassLong(); RegisterClass()就是在系统注册某一类型的窗体。也就转载 2009-09-21 17:10:00 · 591 阅读 · 0 评论 -
解析#pragma指令
字体大小: 大 | 中 | 小 转自CSDN在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Pa转载 2009-09-21 16:55:00 · 266 阅读 · 0 评论 -
assert()
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序: ...... ASSE转载 2009-09-16 09:13:00 · 520 阅读 · 0 评论 -
VC++动态链接库编程之读者反馈与答复
1.关于文章的获取 许多读者发来e-mail询问本系列文章的相关事宜,如: (1) 是否已出版? (2) 哪里可以下载打包版? (3) 哪里可以下载笔者的其它文章? 还有一些读者对日前笔者在天极网发表的《C语言嵌入式系统编程修炼之道》非常喜爱,给予了热情洋溢的赞扬,询问笔者能否继续创作嵌入式编程方面的文章。 对于这些问题,统一作答如下: (1)本系列文章暂时尚未出版;转载 2010-01-15 17:05:00 · 460 阅读 · 0 评论 -
VC++动态链接库编程之基础慨念
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被转载 2010-01-15 16:57:00 · 511 阅读 · 0 评论 -
string转换为char*
string 是c++标准库里面其中一个,封装了对字符串的操作 把string转换为char* 有3中方法: 1。data 如: string str="abc"; char *p=str.data(); 2.c_str 如:string str="gdfd"; char *p=str.c_str(); 3 copy 比如 string str="hello"; char p[40]; s转载 2010-04-19 09:27:00 · 583 阅读 · 0 评论 -
一个将string转换为 const* char的函数
const * char c_str() 一个将string转换为 const* char的函数。 string的c_str()返回的指针是由string管理的。它的生命期是string对象的生命期。然后可以按C的方式使用这个指针,或把它的内容复制出来。 例如: string s; cin>>s; const char *ch=s.转载 2010-04-01 20:09:00 · 10480 阅读 · 0 评论 -
itoa函数
itoa函数 #include#includeint main(){ int num = 10; char str[100]; itoa(num, str, 2); printf("%s/n", str); return 0;}itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用 的基数。在上例中,转换基数为1转载 2010-04-02 14:44:00 · 1070 阅读 · 0 评论 -
从int 到string的几种方法
从int 到string的几种方法 1. int sprintf( char *buffer, const char *format [, argument] ... ); 例如: int ss; char temp[64]; string str; ss = 1000; sprintf(temp, "%d", ss);转载 2010-03-31 19:55:00 · 499 阅读 · 0 评论 -
Math.clamp(number,lo,hi) +
Math.clamp(number,lo,hi) +SWiSH Player Support SWF4 or later - Supported Internally Syntax Math.clamp(number, lo, hi) Arguments All are numbers or expressions. number : Value to be clamped. lo : Low转载 2010-03-31 15:15:00 · 5708 阅读 · 0 评论 -
VS2005的fstream对于中文路径支持
几天发了这篇《用fstream对二进制文件的读写》,有朋友指出了VS2005的fstream对于中文路径支持不好的bug。我想大概是因为VS2005更加重视了对字符串的全球化支持,所以鼓励我们使用unicode编码的字符串,对于MBCS之类的支持可能就疏忽了吧。 我搜索了一下这个问题的解决,参考了如下资料写了演示代码。fstream 和 中文路径 c++博客 About unicod转载 2010-03-14 16:39:00 · 571 阅读 · 0 评论 -
typedef的四个用途和两个陷阱
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: char *原创 2010-03-06 20:09:00 · 384 阅读 · 0 评论 -
VC++动态链接库编程之MFC规则DLL
第4节我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL的创建与使用技巧。 另外,自从本文开始连载后,收到了一些读者的e-mail。有的读者提出了一些问题,笔者将在本文的最后一次连载中选取其中的典型问题进行解答。由于时间的关系,对于读者朋友的来信,笔者暂时不能一一回复,还望海涵!由于笔者的水平有限,文中难免有错误和纰漏,也热诚欢迎读者朋友不吝指正! 5. MFC规则转载 2010-01-15 16:59:00 · 382 阅读 · 0 评论 -
深入讨论C++的enum
enum的秘密:enum是“用户自定义类型” 呵呵,enum在实际中应用比较少,所以你会忽略它。但是,在这里,我告诉你,enum 和 struct、class一样,都是用户自定义类型。 对呀!enum是用户自定义类型,他有数据成员,还有成员函数!For example: enum e{a=1 , b=2 , c=4};那么: 001: enum e e1; /转载 2009-09-08 16:14:00 · 891 阅读 · 0 评论