gpt4 book ai didi

c++ - 将 const 与 typedef 类型一起使用

转载 作者:行者123 更新时间:2023-11-30 01:27:46 27 4
gpt4 key购买 nike

以下代码在大多数编译器(包括 Microsoft Visual Studio 的 - cl、Minimalist GNU for Windows - MinGW)上编译良好,但在 Digital Mars Compiler - dmc 上失败并出现错误:Error : 类型限定符和static只能出现在函数参数数组的最外层

const int MAXLENGTH32 = 32;
typedef char String32[MAXLENGTH32];

void f1(const String32 tokens[]) {

}

int main() {

return 0;
}

我想声明如下:

  1. 我发布这篇文章的第一个原因是为了获得专家意见,了解为什么代码在流行的编译器上失败(Bjarne Stroustrup 自己推荐它 http://www2.research.att.com/~bs/compilers.html )。主要问题似乎是将 const 与参数一起使用。如果您删除 const,代码可以在 DMC 编译器上正常编译。

  2. 第二个重要的原因是,在我对编译失败的可能解释的调查中,我没有找到任何确凿的解释。更糟糕的是,我遇到了这样的建议:“C++ 程序员避免使用 const”。张贴者接着说,很难弄清楚规范中关于 const 在上述场景中的用法的说明,而这些事情就是为什么 const 作为类型修饰符,不在 D 中(- 解释一下)。

  3. 写这篇文章的最后一个个人原因是,我所学到的关于 C++ 语言的最特别的事情都是因为没有采取像 it-compiles-on-all-the-rest-so-damn- 这样的立场它和移动。是的。我很想听听专家的意见,看看是什么让看起来正常的代码在 DMC 编译器上失败。谢谢。

最佳答案

明显的解释是 dmc 中存在错误。错误消息非常困惑:对于初学者来说,static 不能出现函数参数中的任何位置,最外层或其他。至于类型限定符,标准很明确,数组上的类型限定符适用到数组的各个元素(这适用递归)。按照规范编写,您的函数声明将是:

void f1(String32 const* tokens)

,在应用 typedef 之后,变成:

void f1( char const (*tokens)[MAXLLENGTH32] );

这是完全合法的。

关于c++ - 将 const 与 typedef 类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com