static const和const static
时间: 2024-10-24 13:17:30 浏览: 45
`static const` 和 `const static` 都是 C++ 中用于声明常量的方式,它们的主要区别在于作用域和初始化时机。
1. **static const**:它是一个静态成员变量,通常声明在类的内部或外部。这种类型的常量在内存中只有一份拷贝,属于整个类或命名空间共享,并且在整个程序生命周期内保持不变。如果你在函数内部声明 `static const`,那么该常量将在整个程序运行期间有效。例如:
```cpp
class MyClass {
public:
static const int MyConst = 42;
};
```
2. **const static**:同样表示一个常量,但它是一个类的静态成员,但是其值必须在类体外初始化。这意味着它的值必须在创建类的对象之前就已经确定,且仅有一个实例。例如:
```cpp
class MyClass {
public:
static const int MyConst; // 定义,实际初始化在.cpp文件中
};
const int MyClass::MyConst = 99; // 实际初始化在这里
```
相关问题
class EncodingDefs { public: static const int RAW = 0; static const int COPYRECT = 1; static const int RRE = 2; static const int HEXTILE = 5; static const int TIGHT = 7; static const int ZRLE = 16; static const char *const SIG_RAW; static const char *const SIG_COPYRECT; static const char *const SIG_RRE; static const char *const SIG_HEXTILE; static const char *const SIG_TIGHT; static const char *const SIG_ZRLE; };
这是一个 C++ 类 EncodingDefs,它定义了一些常量和字符串常量,用于表示远程桌面协议中的编码类型。
其中,常量 RAW、COPYRECT、RRE、HEXTILE、TIGHT 和 ZRLE 分别表示编码类型的编号。这些常量的值是固定的,不能修改。
另外,类中还定义了一些字符串常量,包括 SIG_RAW、SIG_COPYRECT、SIG_RRE、SIG_HEXTILE、SIG_TIGHT 和 SIG_ZRLE。这些字符串常量是编码类型的名称,可以用于在日志或其他输出中表示编码类型的名称。这些字符串常量的值也是固定的,不能修改。
这个类的作用是提供一种便捷的方式来表示和访问远程桌面协议中的编码类型,使得代码更加易读和维护。
class ClientMsgDefs { public: static const UINT32 SET_PIXEL_FORMAT = 0; static const UINT32 FIX_COLOR_MAP_ENTRIES = 1; static const UINT32 SET_ENCODINGS = 2; static const UINT32 FB_UPDATE_REQUEST = 3; static const UINT32 KEYBOARD_EVENT = 4; static const UINT32 POINTER_EVENT = 5; static const UINT32 CLIENT_CUT_TEXT = 6; static const UINT32 CLIENT_CUT_TEXT_UTF8 = 0xFC000200; static const UINT32 ENABLE_CUT_TEXT_UTF8 = 0xFC000201; static const UINT32 ECHO_REQUEST = 0xFC000300; };
这段代码看起来像是一个定义了一些常量的类,这些常量的值被用于客户端和服务器之间的通信协议。每个常量代表一个特定的消息类型,例如 SET_PIXEL_FORMAT 代表设置像素格式,FIX_COLOR_MAP_ENTRIES 代表固定颜色映射表条目等等。这些常量的值是无符号32位整数,可能被用于消息的标识符或者其他用途。
阅读全文