内联函数而不是带常量的简单宏

时间:2014-08-10 11:50:38

标签: c++ performance macros inline

通常在C ++中,你想使用常量而不是用#define定义常量,因为有类型检查,这是一件好事。

    #define   MYCONST 10;   // NO
    const int MYCONST = 10; // OK.

这很好,但假设我想改善我的应用程序的性能;如果我必须读取该常数仍然可以从L1到L3的任何缓存级别读取它(我希望是正确的),这会引入缓慢。

将常量定义为如下所示的简单内联函数会更好吗?

    inline int MYCONST()
    {
       return 10;
    }

我应该期待一些改进吗?

根据here的整数,它似乎取决于编译器和我使用的类型。

2 个答案:

答案 0 :(得分:1)

我认为定义const无论如何都是更好的做法,但我也怀疑许多编译器无法正确处理构造,例如

char myBuffer[MYCONST()];

不发出错误消息。

答案 1 :(得分:1)

否和否:当您定义类似

的内容时
const int MYCONST = 10;

该值从“任何缓存级别”读取,但编译器(至少在过去20年中的任何编译器构建)将发出与您使用宏完全相同的代码(或文字,它是等价的),即它将直接放在机器代码中。

因此,你的第二个建议(使用内联函数)不仅没有性能优势,而且阻止了常量的多次使用(如char my_array[MYCONST]),更不用说缺乏可读性,浪费的空间等。你的代码。

只需遵循主要的C ++信条并使用常量,那就没有错:) ...