通常在C ++中,你想使用常量而不是用#define
定义常量,因为有类型检查,这是一件好事。
#define MYCONST 10; // NO
const int MYCONST = 10; // OK.
这很好,但假设我想改善我的应用程序的性能;如果我必须读取该常数仍然可以从L1到L3的任何缓存级别读取它(我希望是正确的),这会引入缓慢。
将常量定义为如下所示的简单内联函数会更好吗?
inline int MYCONST()
{
return 10;
}
我应该期待一些改进吗?
根据here的整数,它似乎取决于编译器和我使用的类型。
答案 0 :(得分:1)
我认为定义const
无论如何都是更好的做法,但我也怀疑许多编译器无法正确处理构造,例如
char myBuffer[MYCONST()];
不发出错误消息。
答案 1 :(得分:1)
否和否:当您定义类似
的内容时const int MYCONST = 10;
该值不从“任何缓存级别”读取,但编译器(至少在过去20年中的任何编译器构建)将发出与您使用宏完全相同的代码(或文字,它是等价的),即它将直接放在机器代码中。
因此,你的第二个建议(使用内联函数)不仅没有性能优势,而且阻止了常量的多次使用(如char my_array[MYCONST]
),更不用说缺乏可读性,浪费的空间等。你的代码。
只需遵循主要的C ++信条并使用常量,那就没有错:) ...