创建64位常量时使用LL或ULL作为后缀,如:
int64_t my_value = 0×123456789LL; uint64_t my_mask = 3ULL << 48;如果你确实需要32位和64位系统具有不同代码,可以使用#ifdef _LP64指令来切分32/64位代码.(尽量不要这么做,如果非用不可,尽量使修改局部化)
预处理宏:使用宏时要非常谨慎,尽量以内联函数,枚举和常量代替之.
宏意味着你和编译器看到的代码是不同的.这可能会导致异常行为,尤其因为宏具有全局作用域.
值得庆幸的是,C++中,宏不像在C中那么必不可少.以往用宏展开性能关键的代码,现在可以用内联函数替代.用宏表示常量可被const变量代替.用宏“缩写”长变量名可被引用代替.用宏进行条件编译...这个,千万别这么做,会令测试更加痛苦(#define防止头文件重包含当然是个特例).
宏可以做一些其他技术无法实现的事情,在一些代码库(尤其是底层库中)可以看到宏的某些特性(如用#字符串化,用##连接等等).但在使用前,仔细考虑一下能不能不使用宏达到同样的目的.
下面给出的用法模式可以避免使用宏带来的问题;如果你要宏,尽可能遵守:(1)、不要在.h文件中定义宏.(2)、在马上要使用时才进行#define,使用后要立即#undef.(3)、不要只是对已经存在的宏使用#undef,选择一个不会冲突的名称;(4)、不要试图使用展开后会导致C++构造不稳定的宏,不然也至少要附上文档说明其行为.
0和NULL:整数用0,实数用0.0,指针用NULL,字符(串)用'\0'.
整数用0,实数用0.0,这一点是毫无争议的.
对于指针(地址值),到底是用0还是NULL,Bjarne Stroustrup建议使用最原始的0.我们建议使用看上去像是指针的NULL,事实上一些C++编译器(如gc.1.0)对NULL进行了特殊的定义,可以给出有用的警告信息,尤其是sizeof(NULL)和sizeof(0)不相等的情况.
字符(串)用'\0',不仅类型正确而且可读性好.
sizeof:尽可能用sizeof(varname)代替sizeof(type).
使用sizeof(varname)是因为当代码中变量类型改变时会自动更新.某些情况下sizeof(type)或许有意义,但还是要尽量避免,因为它会导致变量类型改变后不能同步.
Struct data; Struct data; memset(&data, 0, sizeof(data));Boost库:只使用Boost中被认可的库.
定义:Boost库集是一个广受欢迎,经过同行鉴定,免费开源的C++库集.
优点:Boost代码质量普遍较高,可移植性好,填补了C++标准库很多空白,如型别的特性,更完善的绑定器,更好的智能指针,同时还提供了TR1(标准库扩展)的实现.
缺点:某些Boost库提倡的编程实践可读性差,比如元编程和其他高级模板技术,以及过度“函数化”的编程风格.
结论:为了向阅读和维护代码的人员提供更好的可读性,我们只允许使用Boost一部分经认可的特性子集.目前允许使用以下库:
(1)、CompressedPair:boost/compressed_pair.hpp
(2)、PointerContainer:boost/ptr_container(序列化除外)
(3)、Array:boost/array.hpp
(4)、TheBoostGraphLibrary(BGL):boost/graph(序列化除外)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-35033-16.html
恶狗理解草狗意
这种做错事不道歉的官僚作风不除