c++常量结构初始化
c++ const struct initialization
我需要用结构的字段的有效值初始化这个变量:const WAVEFORMATEX *pFormat
。
首先,我尝试在声明后进行修改:(*pFormat).wFormatTag = 0;
,然后很快发现const修饰符不允许这样的操作。然后我尝试了内联初始化的变体
new WAVEFORMATEX() { 0, 0, 0, 0, 0, 0, 0}; //or
WAVEFORMATEX { 0, 0, 0, 0, 0, 0, 0};
第一个抛出一个"期望a;"错误,并且第二个初始化表达式未返回正确的类型。有人能帮忙吗?我稍后使用的一个函数调用必须具有const WAVEFORMATEX*类型的参数。
以下是结构文档:http://msdn.microsoft.com/en-us/library/windows/desktop/dd390970(v=vs.85).aspx
函数需要const WAVEWHATEVER*
类型的参数这一事实并不意味着你必须声明这个结构,以便它同时成为const WAVEWHATEVER*
,只需使用:
void foo(const WAVEWHATEVER* w) {}
WAVEWHATEVER w;
w.FormatTag = 0;
// [...] and so on
foo(&w);
该函数仅保证它不会更改原始w
的内容。
我想你要找的是:
const WAVEFORMATEX * pFormat = new WAVEFORMATEX{ 0, 0, 0, 0, 0, 0, 0};
这将允许您在一个表达式中初始化const T*
。其他方法可以使您的意图在面对变化时更加清晰或稳健,例如创建工厂功能等。
这与您之前尝试的不同之处在于缺少()
。使用()
将尝试调用一个没有参数的默认构造函数,然后当它后面紧跟着初始值设定项列表时会导致语法错误。
不使用new
运算符将导致您在堆栈而不是堆上分配内存,并且由于结果不是指针,因此您的类型是错误的。
相关文章:
- 在C和C++中初始化结构中的数组
- 我们可以用参数化构造函数初始化结构的数组吗?
- 尝试初始化结构内的联合时出错
- 使用其他成员初始化结构的成员?
- 使用构造函数初始化结构还是在之后设置其值更好?
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 如何在另一个结构中初始化结构数组?
- 如何在构造函数中初始化结构体的动态数组?
- 初始化结构中的联合 - c++
- 尝试初始化结构向量时出现编译错误
- 用于初始化结构的 void 指针强制转换
- 初始化结构的两种方式
- 使用用户定义的构造函数初始化C++结构
- 使用初始值设定项列表初始化结构,对于 std::array 失败
- 在 c++ 中初始化结构的指针
- 无序列图会创建一个零初始化结构吗?
- 如何在C++中初始化结构
- C 用结构指针初始化结构
- 在C 中初始化结构数组
- 使用数组聚合初始化结构数组