更好的定义方法

时间:2017-07-29 08:53:23

标签: c++ c++14

在探索用于学习目的的SQLite源代码时,我在源代码中的许多地方都发现了这一点;

#define SQLITE_LOCK_NONE          0
#define SQLITE_LOCK_SHARED        1
#define SQLITE_LOCK_RESERVED      2
#define SQLITE_LOCK_PENDING       3
#define SQLITE_LOCK_EXCLUSIVE     4

#define SQLITE_IOCAP_ATOMIC                 0x00000001
#define SQLITE_IOCAP_ATOMIC512              0x00000002
#define SQLITE_IOCAP_ATOMIC1K               0x00000004
#define SQLITE_IOCAP_ATOMIC2K               0x00000008
#define SQLITE_IOCAP_ATOMIC4K               0x00000010

这是现代C ++(C ++ 11,14,17)中的标准,还是在现代C ++中有不同的方法?

1 个答案:

答案 0 :(得分:1)

据我所知,从来没有理由在C ++中使用#define作为常量。你总是可以写

const int my_constant = 42;

对于你的情况,你可能想要一个枚举

enum SQLITE_LOCK {SQLITE_LOCK_NONE, SQLITE_LOCK_SHARED, SQLITE_LOCK_RESERVED, 
      SQLITE_LOCK_PENDING, SQLITE_LOCK_EXCLUSIVE };

这是c ++ 11中真正改进的东西,因为你现在可以使用作用域的枚举

enum class SQLITE_LOCK { .... };

PS:现代C ++对编译时常量也有constexpr,但我不熟悉它。