只有静态常量整型数据成员才可以在类内进行初始化
时间: 2023-06-17 19:04:21 浏览: 126
这个说法是不正确的。在C++11之前,确实只有静态常量整型数据成员可以在类内初始化。但是,C++11引入了新的特性,允许非静态成员变量和静态数据成员在类内进行初始化。例如:
```c++
class MyClass {
public:
int myInt = 42; // C++11引入的成员变量初始化语法
static const int myConstInt = 100; // 静态常量整型数据成员可以在类内初始化
static int myStaticInt; // 静态整型数据成员的定义
};
int MyClass::myStaticInt = 200; // 静态数据成员的初始化
```
在这个例子中,`myInt`是一个非静态成员变量,它在类内进行了初始化。`myConstInt`是一个静态常量整型数据成员,同样可以在类内进行初始化。`myStaticInt`是一个静态整型数据成员,需要在类外进行定义和初始化。
相关问题
TCHAR* wndCLassName = TEXT(“Window Class Name”); 只有静态常量整型数据成员才可以在类中初始化 改对
TCHAR* 类型通常用于Windows API中的宽字符字符串,特别是在MFC(Microsoft Foundation Classes)中。在这个例子中,`TEXT("Window Class Name")` 是一个宏,它实际上是将字面的字符串转换成宽字符数组。然而,你提到的"只有静态常量整型数据成员才可以在类中初始化"这个说法并不完全适用于C++。
在C++中,变量可以在声明时进行初始化,不仅仅是静态常量整型数据成员。对于像 `TCHAR*` 这样的指针,你可以直接在类的成员初始化列表中初始化,例如:
```cpp
class MyClass {
public:
MyClass() : wndCLassName(TEXT("Window Class Name")) {} // 初始化宽字符指针
private:
TCHAR* wndCLassName;
};
```
但是要注意的是,如果`wndCLassName`是你想要修改的字符串内容,那么应该将其声明为`std::wstring`而不是`TCHAR*`,因为`TCHAR`通常是`wchar_t`,而`TEXT`宏需要配合宽字符串处理。如果你确实需要动态分配内存或者使用C风格字符串,可以考虑使用`LPCWSTR` 或者 `LPCTSTR`。
静态成员初始化 c++
静态成员初始化是C++编程语言中的一种特性,允许在类定义中直接初始化静态成员变量。静态成员不属于类的任何单个对象,而是类的所有对象共享的成员。在C++中,静态成员变量和静态成员函数都可以被初始化。
静态成员变量在程序执行期间只有一份拷贝,无论创建了多少个类的对象。它们通常用来存储类级别的数据或全局变量,可以通过类名直接访问,也可以通过对象访问。
静态成员初始化通常在类定义内部完成,如下所示:
```cpp
class MyClass {
public:
static int staticVar; // 静态成员变量声明
static void StaticFunc(); // 静态成员函数声明
// 静态成员变量可以在类内直接初始化,但是需要是整型或枚举类型
static const int staticConstVar = 10;
};
// 类外初始化静态成员变量
int MyClass::staticVar = 0;
// 静态成员函数的定义
void MyClass::StaticFunc() {
// ...
}
```
在上面的例子中,`staticVar` 是一个静态成员变量,`staticConstVar` 是一个在类内部初始化的静态常量成员变量。注意,静态常量成员变量可以在类内部进行初始化,但其他类型的静态成员变量必须在类外部进行初始化。
静态成员函数属于类,而不是类的任何对象。它们不能访问非静态成员变量或成员函数,但可以访问静态成员变量和静态成员函数。
阅读全文