typedef用法总结。
引用贴:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html
首先#define为预处理,与typedef是完全不同的机制。详细机制尚未完全明了。请参考前人文章。
用法一:指针变量代替。
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量
typedef char* PCHAR; // 别名不建议全大写
PCHAR pa, pb; // 这是两个char类型的指针。
原文认为这种方法很有用。但个人认为这种方法容易引起误解。如果要使用,需要在变量名中有指针的隐含指示。
用法二:struct的使用省略。
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;
如果使用typedef,则可以这样:
typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct。不建议使用此方式。但需要能够理解他人代码中这样的使用。
用法三:用typedef来定义与平台无关的类型。(个人认为最常用的用法)
REAL代表最高精度的浮点数。
typedef long double REAL; //最高支持lond double 平台
typedef double REAL;//最高支持double 平台
typedef float REAL;//最高支持float 平台
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。
用法四:对类,定义一个容易理解的别名。
例子1:
class ABC{ /*code*/ };
typedef ABC Rectangle;
你看到ABC肯定不知道这个类是做什么用的。但当你看到Rectangle最少你应该知道这个类是一个矩形。
PS:不建议任何人构建ABC这种类。但你无法控制所有人。所以有时候Typedef是一个很好的选择。
例子2:
template< class typeA > class ABC{ /* code */ };
typedef < calss AAA >ABC RectangleA;
typedef < calss BBB >ABC RectangleB;
此例子中变量名非常不推荐。因此为上份工作的代码。所以只能使用AAA和BBB代替。但从中应该也能看到用法。
用法五:函数指针的别名。
格式:typedef 返回类型(*新类型)(参数表)
typedef char (*ptrFun)(int);
ptrFun pFun;
char getInt(int a){ return a;}
int main()
{
pFun = getInt;
cout<< (*pFun)(2) << endls;
return 0;
}
暂未使用此方式来编写代码。但存在即合理。本质上,和类的别名无什么区别。
一个未试验的猜想:是否可以将 *ptrFun 变为 ptrFun ?
解答原文的一个问题:(仅个人认知,不代表绝对正确。欢迎讨论)
原文案例:
typedef char * pStr;
char string[4] = "abc";
const char *p1 = string;
const pStr p2 = string;
p1++;
p2++;
原文中,指出P2++将会出错。
1:pStr是一个自定义的类型,在前面加const将会使我们无法改变这个类型的值。
2:反推论,这个pStr是保存的是一个指针。具体内容为指针地址。当对指针地址进行++时,会改变具体内容。所以报错。
typedef用法总结。的更多相关文章
- C++ typedef用法小结 (※不能不看※)
C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...
- [转载] C++ typedef 用法详解
typedef的语法描述 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和 double等基本数据类型.从基本数据类型名称上,不能够看出其所代表的物理属性 ...
- typedef用法小结
typedef用法小结- - 注意:本文转自网络,版权归原作者所有. typedef typedef用法小结- - 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等 ...
- c++ --> typedef用法总结
typedef用法总结 一.四大用途 用途1 定义类型别名,在大量使用指针的地方,typedef更方便 typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // ...
- [C++]typedef用法
参考:C/C++ typedef用法详解(真的很详细) 四个用途 定义一种类型的别名,而不是简单的宏替换 定义struct新对象的别名 定义和平台无关的类型 为复杂声明定义一个简单的别名 typede ...
- C++进阶2. typedef用法
C++ 中的typedef用法 20131011 Typedef在C++中是一个关键字,他的用法有多重,但是自己又说不全面,所以整理一下: 1.用类型的别名 typedef char* PChar; ...
- (转)typedef用法
Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...
- C语言中typedef用法
C语言中typedef用法 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等) ...
- C++ typedef用法小结
一.typedef的四个用法 用法一: 为复杂的声明定义一个新的简单的别名.方法是:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版.举例 ...
- (转)[C++语法] 关键字typedef用法
转自http://www.cnblogs.com/SweetDream/archive/2006/05/10/395921.html C/C++语言中的typedef相信大家已经不陌生,本文对C/C+ ...
随机推荐
- Node.js实践第一天
实践案例一 表单提交 demo.html <!doctype html> <html> <head> <title>表单提交</title> ...
- 微信SDK导入报错 Undefined symbols for architecture i386:"operator delete[](void*)", referenced from:
异常信息: Undefined symbols for architecture i386: "operator delete[](void*)", referenced fro ...
- JMS & ActiveMQ小结
JMS简介 JMS源于企业应用对于消息中间件的需求,使应用程序可以借助消息进行异步处理而互不影响.Sun公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能 ...
- MysqlDataSource里的Connection实现类实现了isValid(int timeout)方法
在项目中,需要连接mysql数据库的时候,我们最好选择使用数据库连接池,即需要选择DataSource. 而在使用c3p0的ComboPooledDataSource时,发现它的Connection实 ...
- win7+IE11 中开发工具报错occurredJSLugin.3005解决办法
系统环境 win7+IE11 报错描述: Exception in window.onload: Error: An error has ocurredJSPlugin.3005 Stack Trac ...
- PHP获取生成一个页面的数据库查询次数(转)
很多博客软件都有这么一个功能,比如“生成本次页面一共花费了xx毫秒,进行了xx次数据库查询”等等.那么这个功能是如何实现的呢,下面我大概说下思路. 1. 在类的构造函数中声明全局变量 定义一个全局变量 ...
- eclipse tomcat内存设置
-Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m
- Hibernate 体系结构简述
SessionFactory: Hibernate的关键对象,它是单个数据库映射关系经过编译后的内存镜像,同时它是线程安全的.它是生成Session的工厂,本身需要依赖于ConnectionProvi ...
- App_Code
App_Code,文件夹是·NET平台下.在创建网站时,系统为类自动放的位置.它位于Web应用程序根目录下,其存储所有应当作为应用程序的一部分动态编译的类文件.这些类文件自 动链接到应用程序,而不需要 ...
- SQL Server 提高创建索引速度的 2 个方法
方法 1. 使用tempdb来提速 create index index_name on table_name (column_list) with(sort_in_tempdb = on); 方法 ...