zoukankan      html  css  js  c++  java
  • Effective C++ 学习笔记(2)

    尽量使用const和inline而不是#define

      尽量使用编译器而不是预处理。

      #define定义的宏不会加入符号表,不利于调试。

      当使用#define定义常量时,使用const替代:#define ABC 123 => const int ABC=123;定义某个class常量时要同时用static与const修饰,以确保只存在一份拷贝。

       当使用#define定义类似函数的宏时,用inline函数替代:

       举例:

         计算两个对象大小:#define max(a,b) ((a)>(b)?(a):(b)),对于这样的宏一定要加括号,因为预处理器只是完成简单的字符串替代,可能引起意想不到的问题。

         对于下面情况:

                int a=5, b=0;

                max(++a,b); //a的值增加了两次,因为++a>b,所以问号前后各一次,a=7,b=0

                max(++a,b+10);//a的值增加了一次,因为++a<b+10,返回b+10,a=6,b=0

          对于这种情况,使用inline函数替代:

                inline int max(int a,int b)

                {

                  return a>b?a:b;

                }

          上述函数的缺点时只能处理int类型,改为模板如下:

                template<class T>

                inline const T& max(const T& a, const T& b)

                {

                  return a>b?a:b;

                }

          这里使用引用传递,在T表示较大的类型时可以提高效率。 

  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/DanielZheng/p/2011280.html
Copyright © 2011-2022 走看看