繁体   English   中英

Visual C++ 表达式必须具有常量值

[英]Visual C++ Expression must have a constant value

有谁知道为什么 Visual Studio 是唯一一个给我这个错误的编译器 - 表达式必须有一个常量值(指大小)。

#include <iostream>
#include <cstring>
using std::cout; using std::endl;

int main() {
    const char Ca3[] = { "Hello" };
    const char Ca4[] = { "World" };

    const size_t size = strlen(Ca3) + strlen(Ca4) + 2;

    char bigString[size];
    strcpy(bigString, Ca3);
    strcat(bigString, " ");
    strcat(bigString, Ca4);
    cout << bigString << endl;

    system("PAUSE");
    return 0;
}

strlen函数没有声明为constexpr ,这意味着它的结果不是一个常量表达式

所以size不是一个常量表达式,因此它不能用作数组维度。 代码在标准 C++ 中格式错误。

许多编译器都有一个扩展,即非常量表达式可以用作数组维度。 如果另一个编译器接受此代码,那么这可能就是解释。 您可能能够通过使用符合标准的开关(例如对于 gcc, -std=c++14 -pedantic )来刺激其他编译器。


要解决此问题,您可以编写自己的constexpr等价于strlen 或者你可以使用sizeof 或者,您可以使用std::string并完全避免 C 风格的字符串处理。

这仅在 VC++ 中发生的原因是 VC++ 是(显然)您尝试过的唯一一个在这方面符合 C++ 标准的编译器。

一段时间以来,C 有一个称为“可变长度数组”的特性,这将允许这样做。 一些 C++ 编译器(尤其是 gcc)也允许在 C++ 中使用它们(至少在默认情况下),即使 C++ 标准禁止它们。

如果你想要一些像数组一样的东西,但也允许你在运行时指定它的大小,你通常需要一个std::vector而不是数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM