Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哪一个是const int、extern const int、inline constexpr中最好的?_C++_Optimization - Fatal编程技术网

C++ 哪一个是const int、extern const int、inline constexpr中最好的?

C++ 哪一个是const int、extern const int、inline constexpr中最好的?,c++,optimization,C++,Optimization,我有一个头文件,其中有一些#define常量(所有整数)。我想用extern const int替换#define常量,然后在单独的文件中定义它们。但碰巧一些#define常量被用作数组的大小。所以对于这些常数,我不能用extern const int来代替。所以我必须找到其他的方法来解决这个问题,我找到了两个解决方案,但不能决定哪一个更好 将每个#define const替换为const int。唯一的问题是const int具有内部链接,因此最终我将在不同的翻译单元中拥有多个副本,从而产生我

我有一个头文件,其中有一些#define常量(所有整数)。我想用extern const int替换#define常量,然后在单独的文件中定义它们。但碰巧一些#define常量被用作数组的大小。所以对于这些常数,我不能用extern const int来代替。所以我必须找到其他的方法来解决这个问题,我找到了两个解决方案,但不能决定哪一个更好

  • 将每个#define const替换为const int。唯一的问题是const int具有内部链接,因此最终我将在不同的翻译单元中拥有多个副本,从而产生我想要避免的多个存储。但是,编译器可能会再次通过将每个const int的用法替换为它的值来优化它,最终不会为cost int使用任何存储
  • 另一个选项是inline constexpr(在试图找到解决方案时遇到)。在这种情况下,保证链接器只保留一份副本
  • 所以内联constexpr看起来更好,但是当我在第一种情况下开始考虑优化时,它们看起来都不错


    请提供建议和理由。

    constexpr
    是通常的做法,除非您没有C++11支持,在这种情况下,您可以这样做:

    enum { MYCONST = 120 };
    

    这个问题是关于C++的,你可以同时做这两个,这更好的取决于谁是一个法官。在缺乏细节的情况下,这是一个纯粹基于意见的问题。