c ++ const struct初始化

时间:2014-08-29 21:00:02

标签: c++ struct const

我需要初始化此变量:const WAVEFORMATEX *pFormat,其中包含struct字段的有效值。

首先我尝试在声明后修改:(*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

2 个答案:

答案 0 :(得分:3)

函数需要const WAVEWHATEVER*类型的参数这一事实并不意味着您必须声明此结构以使其同时变为const WAVEWHATEVER*,只需使用:

 void foo(const WAVEWHATEVER* w) {}

 WAVEWHATEVER w;
 w.FormatTag = 0;
 // [...] and so on
 foo(&w);

该功能仅保证不会更改原始w的内容。

答案 1 :(得分:1)

我认为你在寻找的是:

const WAVEFORMATEX * pFormat = new WAVEFORMATEX{ 0, 0, 0, 0, 0, 0, 0};

这将允许您在一个表达式中初始化const T*。存在其他方法可以使您的意图在变化时更加清晰或健壮,例如创建工厂函数等。

这与您之前尝试过的内容之间的区别在于缺少()。使用()将尝试调用没有参数的默认构造函数,然后在紧跟初始化列表时会导致语法错误。

不使用new运算符将导致您在堆栈而不是堆上分配内存,并且您的类型错误,因为结果不是指针。