- 浏览: 355561 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
转自
http://blog.chinaunix.net/uid-28458801-id-4043766.html
typedef long INDEX 给long这样的类型起别名,它有两个用处:一是表明该类型的特殊作用,二是将来有可能要改变这种类型(比如提高精度),
但是现在了解到可以在class类里面使用(并且还有public,private之分哦) C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。在函数体内部typedef,这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
c中有了#define 为什么还要typedef就是为了增强安全和健壮性
随便记录下c中的常量(#define pi = 3.14)和c++中的常量(const double pi = 3.14),前者只是简单的替换,后者还要经过一系列的编译器的安全检查的, 这也是增加了安全性
我也试了试 #define 是否可以再class类里面使用, 结果是可以的, 但是#define是没有作用域的, 也没有什么public, private之分的, 就相当于一个全局的变量, 什么都可以使用
如果该语句放在public段中,则可以在类外部使用,比如:
MyClass::INDEX usercode;//声明一个变量
而如果放在private段中,则只能在类内使用。
以往我也经常用typedef,但是从来没有在类里面用过。今天算是学了一招了。C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。比如同样表示长度,可能有的类中只须char即可,有的类中要用int,而有的类可能连long都嫌小。那么,我一概起个别名叫“size”,不同的类中有不同的定义。于是,下面的声明语句就足以避免冲突而且易于理解:
MyClass::size MyClass::GetSize() const;
进而,我试验了一下在函数体内部typedef,果然这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
至此,我们可以回过来考虑一下,为什么C++有了“#define”还要“typedef”。过去我始终没有细想过这个原因。原来这样做是为了安全性与健壮性。
这里,我联想到了const,C语言中没有常量这个概念,如果要用常量,就用“#define pi 3.14”这种形式,但是C++有了“const double pi = 3.14;”虽说继续用前者一样可以写出程序,但这等于放弃了编译器的安全检查。
“#define”产生的效果在编译之前就起作用了,所有的pi都被替换成了3.14这样一个“立即数”,立即数是没有类型的,于是,在程序编写过程中不可能给予合适的提醒,在程序的编译中也可能产生意想不到的副作用。const将常量作为有类型的数据进行有效管理,既提供了常量的优点,也给予了足够的安全性。而且,const常量是有作用域的,在程序的不同位置可以给予不同精度的pi。
我们可以参看一下SGI STL中 Vectory的定义就会明白了
http://blog.chinaunix.net/uid-28458801-id-4043766.html
typedef long INDEX 给long这样的类型起别名,它有两个用处:一是表明该类型的特殊作用,二是将来有可能要改变这种类型(比如提高精度),
但是现在了解到可以在class类里面使用(并且还有public,private之分哦) C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。在函数体内部typedef,这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
c中有了#define 为什么还要typedef就是为了增强安全和健壮性
随便记录下c中的常量(#define pi = 3.14)和c++中的常量(const double pi = 3.14),前者只是简单的替换,后者还要经过一系列的编译器的安全检查的, 这也是增加了安全性
我也试了试 #define 是否可以再class类里面使用, 结果是可以的, 但是#define是没有作用域的, 也没有什么public, private之分的, 就相当于一个全局的变量, 什么都可以使用
class MyClass { public: typedef long INDEX; ... };
如果该语句放在public段中,则可以在类外部使用,比如:
MyClass::INDEX usercode;//声明一个变量
而如果放在private段中,则只能在类内使用。
以往我也经常用typedef,但是从来没有在类里面用过。今天算是学了一招了。C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。比如同样表示长度,可能有的类中只须char即可,有的类中要用int,而有的类可能连long都嫌小。那么,我一概起个别名叫“size”,不同的类中有不同的定义。于是,下面的声明语句就足以避免冲突而且易于理解:
MyClass::size MyClass::GetSize() const;
进而,我试验了一下在函数体内部typedef,果然这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
至此,我们可以回过来考虑一下,为什么C++有了“#define”还要“typedef”。过去我始终没有细想过这个原因。原来这样做是为了安全性与健壮性。
这里,我联想到了const,C语言中没有常量这个概念,如果要用常量,就用“#define pi 3.14”这种形式,但是C++有了“const double pi = 3.14;”虽说继续用前者一样可以写出程序,但这等于放弃了编译器的安全检查。
“#define”产生的效果在编译之前就起作用了,所有的pi都被替换成了3.14这样一个“立即数”,立即数是没有类型的,于是,在程序编写过程中不可能给予合适的提醒,在程序的编译中也可能产生意想不到的副作用。const将常量作为有类型的数据进行有效管理,既提供了常量的优点,也给予了足够的安全性。而且,const常量是有作用域的,在程序的不同位置可以给予不同精度的pi。
我们可以参看一下SGI STL中 Vectory的定义就会明白了
template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) > class vector : protected _Vector_base<_Tp, _Alloc> { // requirements: __STL_CLASS_REQUIRES(_Tp, _Assignable); private: typedef _Vector_base<_Tp, _Alloc> _Base; public: typedef _Tp value_type; typedef value_type* pointer; typedef const value_type* const_pointer; typedef value_type* iterator; typedef const value_type* const_iterator; typedef value_type& reference; typedef const value_type& const_reference; typedef size_t size_type; typedef ptrdiff_t difference_type; .......
发表评论
-
FreeRTOS
2022-03-05 16:31 212Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 367https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1240https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 429https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 529// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 533https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5218583相关资料,整理中... -
Java 事件模型基础:监听器、事件、事件源、事件注册
2017-06-27 08:55 787转自 http://www.cnblogs.com/mengd ... -
深入剖析Java中的装箱和拆箱
2017-06-27 08:31 447转自 http://www.cnblogs.com/dolph ... -
Java高级应用之JNI
2017-06-19 09:00 554参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2043基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 8621 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1521OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1837ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 819转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1819转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1007C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 931转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 940转自 http://blog.csdn.net/jan ...
相关推荐
C_C++中typedef_struct和struct的用法。
主要讲述c/c++中struct和typedef struct的区别以及各种用法
c++笔记struct和typedef struct彻底明白了
至今已遇到两个typedef诡异的定义,因此决定下笔记之,以备后用。
在C还是C++代码中,typedef都使用的很多,在C代码中尤其是多,typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,需要的朋友可以参考下
c++ typedef 两种格式应用例子
C/C++中的typedef和#define 前言: 在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C...
主要介绍了C++中typedef 及其与struct的结合使用,需要的朋友可以参考下
又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客。于是我想把我理解的东西整理...
typedef的用法
C语言中typedef的用法以及函数指针
又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客。于是我就想把我理解的东西...
这是一份相当全面细致的Typedef使用总结,囊括了typdef使用时需要注意的所有细节。
记下的一点点东西,愿与君共进步
于C++中函数指针的使用(包含对typedef用法的讨论)
这篇文档介绍了c++中函数指针的如用方法,另外对typedef的用法进行介绍,希望对你能有帮助。。