【问题标题】:cast “int32_t” to “static const int32_t”将“int32_t”转换为“静态常量 int32_t”
【发布时间】:2014-08-08 11:47:45
【问题描述】:

(主要编辑:我提出原始问题的方式有点混乱。所以,我正在努力改进问题)

我正在尝试将“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;但是,作为这样的“静态 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

我收到以下错误(代码 sn-p 中标记的第 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 似乎不是恒定的。

【问题讨论】:

  • 错误信息很清楚,不能分配给const的变量。不能为 const 变量分配新值,这就是为什么要首先声明变量 const
  • 另外,在myRFPulseArray[IRF_MAX_ENVELOPE_ELEMENTS2]的上下文中,该值不是参数,而是由该语句创建的sSample数组的大小。

标签: c++ constants


【解决方案1】:

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

【讨论】:

  • 对不起,我的问题令人困惑。请看看我改进的问题。任何帮助将不胜感激。
【解决方案2】:

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

不变的情况或状态。 - google"

所以你不能在你启动它之后改变 const 变量的值。

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

以这个为例

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

2到底是什么,它有什么作用?

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

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

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

【讨论】:

  • 对不起,我的问题令人困惑。请看看我改进的问题。任何帮助将不胜感激。
【解决方案3】:
const_cast<int32_t>(IRF_MAX_ENVELOPE_ELEMENTS2)=256;

你可以像这样改变你的常量值,我希望这对你的问题有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多