`
kmplayer
  • 浏览: 508929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款1:尽量以const和inline取代#define

 
阅读更多

1,意思就是"尽量以编译器(compiler)"取代预处理器(preprocessor)"
2,如果你这么做:
#define PI 3.14
PI可能在编译之前就先被预处理器移走了,也没有机会被编译器看见.结果,PI没有进入符号表.

一个既简单又有效率的做法:使用常量.
const double PI = 3.14;

3,有时,我们需要定义一个class的专属常量,即这个常量的生存空间局限于class内.
我们可以这么做:
class GamePlayer
{
public:
static const int NUM = 5; //常量的声明和初始化,不是定义
int scores[NUM]; //常量的运用
}
const int GamePlayer::NUM; //这里才是定义

4,另一个误用#define的常见例子:实现函数宏.
如:
#define max(a,b) ((a) > (b) ? (a) : (b))
加上括号,也有问题,看下面的动作:
int a = 5, b = 0;
max(++a, b);//a会被累加两次
max(++a, b+10); //a被累加一次

使用inline函数,可以获得宏带来的高效率以及函数带来的可预期行为和引数型别检验.
如:
template<class T>
inline const T& max(const T& a, const T& b)
{
return a > b ? a : b;
}

5,但是预处理器还是需要.
#include和#ifdef/#ifndef在编译控制过程中依旧扮演重要的角色.
分享到:
评论

相关推荐

    const #define inline

    在编程领域,`const`、`#define`与`inline`是三个常用的关键字或预处理器指令,它们各自具有独特的作用和使用场景,掌握它们的区别和正确应用是提升代码质量和效率的重要手段。 #### 1. `const`关键字 `const`...

    const和define用法

    在本文中,我们将详细介绍 const 和 #define 的用法和差异,并讨论为什么 const 正在取代 #define。 const 的用法 在 C++ 中,const 是一种修饰符,用于修饰变量、函数参数、函数返回值等,它可以确保变量或函数的...

    C语言中const与#define的区别

    在C语言中,定义常量通常可以使用const修饰符和#define预处理命令两种方式。这两种方法虽然在很多情况下可以互换,但它们之间存在一些本质的区别,了解这些区别对于编写高效、可维护的代码至关重要。 首先,我们来...

    C语言 #define用法集锦[修正版]

    上述代码的意图是定义两个 `int` 类型的指针 `a` 和 `b`,但由于 `#define` 的工作方式,实际上定义的是一个 `int` 类型指针 `a` 和一个 `int` 类型变量 `b`。正确的做法是使用 `typedef` 语句来定义指针类型: ```...

    #define 问题 用法陷阱

    当结合使用`#define`和`const`时,可能会出现一些混淆。考虑以下代码片段: ```c typedef char* pStr; char string[4] = "abc"; const char* p1 = string; const pStr p2 = string; p1++; p2++; ``` 在这里,`p1...

    CONST和DEFINE的异同

    尽管`#define`仍然有用,特别是在需要文本替换或者实现简单的宏功能时,但程序员更倾向于使用`const`来定义常量,以获得更好的类型安全和编译时检查。因此,在编写C++代码时,尽可能地使用`const`代替`#define`是一...

    Effective.C++.中文第二版.50条款doc文档.chm

    条款1:尽量用const和inline而不用#define 条款2:尽量用而不用 条款3:尽量用new和delete而不用malloc和free 条款4:尽量使用c++风格的注释 第二章 内存管理 条款5:对应的new和delete要采用相同的形式 条款6:析构...

    常用宏定义#define

    在C/C++编程语言中,`#define` 是预处理器指令,用于创建宏定义,它在...因此,在使用宏定义时,需谨慎处理,尤其是在处理复杂表达式和函数宏时,应尽量考虑使用inline函数或者C++11引入的 constexpr 关键字来替代。

    C语言中const定义常量

    ### C语言中const定义常量 #### 一、引言 C语言作为一种广泛使用的编程语言,在软件开发领域占据着极其重要的地位。为了更好地理解和运用C语言中的特性,掌握`const`关键字的使用变得尤为重要。本文将详细介绍如何...

    #define用法集锦.doc

    在编写代码时,应尽量遵循良好的编程实践,例如使用`const`代替无类型的`#define`常量,使用函数代替宏来实现复杂的逻辑,以及正确处理头文件的包含以避免重复定义。理解并正确使用`#define`,能提高代码的可读性...

    c++ 尽量不要使用#define 而是用const、enum、inline替换。

    例如:这里程序文件开头有如下#define语句 代码如下: #define N 10 #define PI 3.14 #define MAX 10000 #define Heigth 6.65 … … 假设这里程序运行出错误,而且就是在我们使用这些常量有错误,此时编辑器应该会抛...

    typedef和#define的用法与区别

    从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。...

    C语言编程技巧 关于const和#define的区别心得

    在C语言编程中,`const`关键字和`#define`预处理器宏是两种常见的...总的来说,尽量使用`const`和`inline`代替`#define`,可以提高代码的可读性、可维护性和安全性。理解这些差异对于编写高质量的C语言代码至关重要。

    C++中const与#define的利弊分析

    在C++编程语言中,`const`和`#define`都是用来定义常量或不可变值的工具,但它们在实现方式、作用范围、类型安全和功能上有着显著的差异。 首先,`#define`是一种预处理器指令,它在编译前会进行文本替换。这意味着...

    define使用

    在程序开发过程中,`#define` 是一个非常常见的预处理器指令,被广泛应用于多种编程语言之中,尤其是在 C 和 C++ 语言中。本文将从多个方面详细介绍 `#define` 的使用方法,并通过具体示例帮助读者更好地理解和应用...

    EFFECTIVE C++ 条款03 尽量使用const 思维导图

    EFFECTIVE C++ 条款03 尽量使用const 思维导图 在 C++ 编程中,使用 const 关键字可以提高代码的可读性、可维护性和安全性。本文将详细介绍 EFFECTIVE C++ 的第三条款:尽量使用 const 思维导图。 一、const ...

    php中const与define的区别 具体归纳详细介绍

    在PHP编程中,`const`和`define`都是用来定义常量的方法,但它们之间存在着明显的差异。本文将从多个方面详细对比这两种定义方式的不同之处,并通过具体的例子加以说明。 #### 1. 定义范围 - **`const`**: 主要...

    精彩编程与编程技巧-软件工程篇-Const与#Const的对比...

    在Visual Basic中,有两类常量声明方式:`Const` 和 `#Const`,它们各有特点,在不同的场景下发挥着不同的作用。 ### `Const` 关键字 `Const` 是用来声明编译时常量的关键字,这意味着一旦一个变量被用 `Const` ...

Global site tag (gtag.js) - Google Analytics