Ann*_*inn 6 c++ static header constants
在头文件中,可以在一行中声明和(预)定义全局常量.
// constants.h
namespace Constant{
static const unsigned int framerate = 60;
static const char * const windowName = "Test";
static const unsigned char * const cursorBitmap = { lots of data };
}
Run Code Online (Sandbox Code Playgroud)
我喜欢这种格式,因为它允许我将常量保存在一个位置,并且避免需要在一个文件中声明常量并在另一个文件中定义它,这有助于提高可读性.constants.h但是,当任何翻译单元包括时,它会按单位扩展这些定义.
我的问题是,如果我包含constants.h在许多翻译单元中,这会导致显着的开销,例如,cursorBitmap其他数组常量是否非常大?如果我将它包含在100个单元中,我的程序是否包含每个字符串和数组文字的100个副本?或者只会复制指针和值?
如果有开销,有没有办法可以避免它而不需要单独声明和定义?
(我也猜测'静态'在这个用法中是多余的,但我还是喜欢把它放在那里)
字符串文字在各个翻译单元中是否重复是一个实施质量问题。
直接声明的对象将在包含此标头的每个翻译单元中复制。不过这并不多。并且在未直接或间接使用某些常量地址的翻译单元中,它可能会被优化掉。
如果你想确保每个常量只有一份副本,甚至没有副本,那么你可以使用类模板,如下所示:
常量.h#pragma once
template< class Dummy >
struct Constant_{
static const unsigned int framerate;
static const char * const windowName;
static const unsigned char * const cursorBitmap;
};
template< class Dummy >
const unsigned int Constant_<Dummy>::framerate = 60;
template< class Dummy >
const char * const Constant_<Dummy::windowName = "Test";
template< class Dummy >
const unsigned char * const Constant_<Dummy>::cursorBitmap = ...;
using Constant = Constant_<void>;
Run Code Online (Sandbox Code Playgroud)
但恕我直言,这比它的价值更多的工作。
一种类似的替代方法是使用inline函数,每个常量对应一个函数。
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |