将“int32_t”转换为“static const int32_t”

时间:2014-08-08 11:47:46

标签: c++ const

(主要编辑:我提出原始问题的方式有点令人困惑。所以,我正在努力改进这个问题)

我正在尝试将“int32_t”转换为“static const int32_t”类型。但是,我无法弄清楚如何一起使用static_cast和const_cast。任何帮助将不胜感激。

我想这样做,而不是将我的“static const int32_t IRF_MAX_ENVELOPE_ELEMENTS2”初始化为硬核值,我想根据传递给相关函数的值来设置它。

说,iNoOfSamples_In的值是128,我也想将IRF_MAX_ENVELOPE_ELEMENTS2设置为128;但是,像这样的“static const int32_t”:

int32_t iNoOfSamples_In = 128;
static const int32_t IRF_MAX_ENVELOPE_ELEMENTS2 = iNoOfSamples_In;

但是,当我去声明一个大小为IRF_MAX_ENVELOPE_ELEMENTS2的数组

    double dTime_Scale[IRF_MAX_ENVELOPE_ELEMENTS2]; // Line 80

我收到以下错误(代码段中标记了第80行):

SpecialPulses.cpp(80) : error C2057: expected constant expression
SpecialPulses.cpp(80) : error C2466: cannot allocate an array of constant size 0
SpecialPulses.cpp(80) : error C2133: 'dTime_Scale' : unknown size

所以,似乎max_envelope_elements不是常数。

3 个答案:

答案 0 :(得分:0)

正如错误消息所示,您无法将变量声明为const,然后更改其值。但是,如果您尝试调用一个const int_32的函数,那很好 - 只需将变量声明为int_32即可。在这种情况下,const只是说函数不会改变函数内部参数的值,但即使这样做也不会影响你的变量。

答案 1 :(得分:0)

通过const表示它是常量,根据定义,常量是:

  

不会改变的情况或事态。 - 谷歌“

因此在启动后不能更改const变量的值。

请注意,const大部分时间用于代码可读性,以代替代码中的幻数。

以此为例

if(a>b%2)
 //do something

到底是什么2,那是做什么的?

而如果你真的可以使用这样的东西。

if(a>b%SOME_CONST_VALUE)
//do something

你实际上可以通过const变量来判断你实际在做什么,而不是让程序员/开发人员维护你的代码,而if语句就是这样做的。

答案 2 :(得分:0)

const_cast<int32_t>(IRF_MAX_ENVELOPE_ELEMENTS2)=256;

您可以像这样更改常量值,我希望这可以帮助您解决问题。