【发布时间】:2014-08-29 21:00:01
【问题描述】:
我需要用结构字段的有效值初始化这个变量: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};
第一个抛出一个 'expecting a ;'错误并且第二个初始化表达式没有返回正确的类型。有人可以帮忙吗?我稍后会使用一个函数调用,它必须有一个 const WAVEFORMATEX * 类型的参数。
这是结构文档:http://msdn.microsoft.com/en-us/library/windows/desktop/dd390970(v=vs.85).aspx
【问题讨论】:
-
如果函数采用
const WAVEFORMATEX *参数,这意味着您必须将WAVEFORMATEX结构的地址传递给它,并且该函数保证不会更改结构的内容。跨度> -
为什么投反对票?由于跛脚的原因,在没有任何 cmets 的情况下投反对票!
-
我不确定您要解决的真正问题。使用
const T* ptr = new T;并不理想。你不能在这样的指针上使用delete ptr;。你会泄漏内存。 -
有趣。我想我还有很多研究要做,就 C++ 中的堆内存分配而言。我不知道为什么我不能删除 ptr。我认为如果在使用 new 关键字后不使用 delete,我会泄漏内存。
-
@R_Sahu 看来你可以在
const T*上使用delete。