c++常量结构初始化

c++ const struct initialization

本文关键字:初始化 结构 常量 c++      更新时间:2023-10-16

我需要用结构的字段的有效值初始化这个变量: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运算符将导致您在堆栈而不是堆上分配内存,并且由于结果不是指针,因此您的类型是错误的。