C++字符和字符串实用经验

文章内容均整理自    刘光《C++程序员不可不知的101条实用经验》

1.关于字符编码的讨论
ASCII字符集:主要包括控制字符(回车键,退格,换行键等);可显示字符(英文大小写字符,阿拉伯数字和西文符号)。
ASCII编码:将ASCII字符集转为计算机可以接受的数字系统的数的规则。使用7bits表示一个字符,共128个字符。ASCII扩展字符集使用8bits,可表示256个字符
注意:ASCII不能对汉文,日文,韩文等进行编码
Unicode码包括UTF-8,UTF-16和UTF-32三种标准。其中UTF-8编码长度不固定,UTF-16占2字节,UTF-32占4字节。Windows操作系统中不做特殊声明,一般说的Unicode编码指的是UTF-16,而linux流行的编码方案是UTF-8。
Windows开发应建议使用Unicode编码,原因如下:
(1)使用Unicode有利于应用程序的本地化,只需要一个二进制文件,即可支持所有语言
(2)Unicode可提高应用程序执行效率,代码执行速度更快,占用内存会更少
(3)可提高程序的兼容性

2.请牢记字符串结束标志'\0'
小心陷阱:
(1)strlen计算的字符串长度是不包括'\0'在内的字符串长度。
(2)定义一个字符串必须要保证此字符串以'\0'结尾
(3)通常我们所说的字符串地址。仅指字符串的首元素的内存地址。
请谨记:
(1)C语言汇总不存在字符串数据类型,其通过一个以'\0'结尾的字符数组实现
(2)在C++编程中建议使用string替换C字符串

3.请务必小心使用memcpy系列函数
POD对象:在C++中,习惯把传统的C风格的struct叫做POD对象
POD对象应具备的特征:
(1)不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列赋值到一个字符数组中,再将其复制会对象,那么该对象的值与原始值一样
(2)对于任意的POD类型T,如果两个T指针分别指向两个不同的对象,再用memcpy库函数把对象1的值赋值到对象2,那么对象2将拥有与对象1相同的值
简单地说,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容再,就能还原出正确无误的POD对象
请谨记:
(1)对于POD对象,可以大胆地使用memcpy和memset类函数,但对于非POD对象,简易不要使用该类函数
(2)C++中的对象可能是POD的也可能是非POD的,因此在C++中使用 memcpy和memset类函数要小心













猜你喜欢

转载自blog.csdn.net/sinat_39061823/article/details/80569307
今日推荐