/************************************************************************/ /* C++条款二:用编译器替换预编译器 */ /************************************************************************/   #include <iostream> using namespace std;   class GamePlayer { private: st…
1 C++最主要的四部分: C Object-Oriented C++: 面向对象 Template C++:泛型编程 STL C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2 尽量以const, enum , inline替换 #define 2.1 #define ASPECT_RATIO 1.653 记号名称ASPECT_RATIO在被编译器识别之前,已经被预编译器替换为1.653了,所以名称ASPECT_RATIO有可能没进入记号表内. 解决方法: const doub…
class HomeForSale //防止别人拷贝方法一:将相应的成员函数声明为private并且不予实现 { public: private: HomeForSale(const HomeForSale&); HomeForSale& operator = (const HomeForSale&);//只有申明,此函数很少被使用   };   //方法二,设计一个专门用来阻止copying动作的基类,然后让其他类继承这个类即可   class Uncopyable { prot…
为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现. 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它).这其实有点像使用Boost提供的版本,那个class名为noncopyable.…
换一种说法就是宁可以编译器替换预处理器 举例 #define ASPECT_RATIO 1.653 记号ASPECT_RATIO也许从未被编译器看见:也许在编译起开始处理源码前它就被预处理器移走了,于是它并没有进入符号表,当出现编译错误的时候会提示1.653,但是不会提示ASPECT_RATIO. 解决办法就是用一个常量替换宏(#define): const double AspectRatio = 1.653; 常量替换宏的两种特殊情况 1. 常量指针 常量定义通常被放在头文件内(以便被不同的…
零.CSS预编译器 CSS预处理器是指对生成CSS前的某一语法的处理.CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,供项目使用 CSS预处理器为CSS增加一些编程的特性,如增加了规则.变量.混入.选择器.继承等等特性,无需考虑游览器的兼容性问题 有助于更好地组织管理样式文件,以及更高效地开发项目 下面介绍主流的CSS预编译器三剑客: 一. CSS预编译器三剑客(Sass.Less.Stylus) Sass:Sass包括两套语法.最开始的语法叫做"缩进语…
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回值的返回方式上,大师Meyers推荐使用表达式[returnT(lhs)+=rhs;]这种使用匿名临时变量的方式,理由是“自古以来未具名对象总是比具名对象更容易被消除”,这种写法将更好地帮助编译器实现返回值优化(ReturnValue Optimization,简写RVO). 针对上述说法,我在两款…
Effective C++之'宁以pass-by-reference-to-const替换pass-by-value' 缺省情况下C++以by value 方式(一个继承自C的方式)传递对象至函数.除非你另外指定,否则函数參数都是以实际实參的复件(副本)为初值,而调用端所获得的亦是函数返回值的一个复件.这些复件(副本)由对象的copy构造函数产出,这可能使得pass-by-value成为费时的操作. 举比例如以下: class Person { public: Person(); virtual…
More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类型来模拟bool类型.这允许参数类型为int和bool的函数重载,但是这样做的缺陷是,对于内置的比较运算符,其仍返回int类型. f(int);f(bool); f(a < b); // 会调用f(int),但其实用户期望调用f(bool). 但是一旦改用支持bool类型的编译器,情况可能会发生改变…
  方法一:仅介绍在客户端环境下使用的方法 1 新建test.less并引入.less该文件(和css一样在head处引入),注意rel="stylesheet/less": <link rel="stylesheet/less" type="text/css" href="text.less"/> 2下载并引入less.js文件,并在head处引入,注意该文件一定要在.less文件后引入: <script…