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

时间:2016-02-01 23:17:58

标签: c++ visual-c++

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

#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;
}

2 个答案:

答案 0 :(得分:2)

$result = mysql_query("SELECT * FROM csv INNER JOIN kbb ON csv.VIN=kbb.Vin ORDER BY STR_TO_DATE(DateInStock, '%m/%d/%Y') DESC "); 函数未声明为strlen,这意味着它的结果不是常量表达式

因此constexpr不是常量表达式,因此它不能用作数组维度。代码在标准C ++中格式不正确。

许多编译器都有一个扩展,即非常量表达式可以用作数组维度。如果另一个编译器接受此代码,则可能是解释。您可以使用标准兼容性开关(例如,对于gcc,size)来刺激其他编译器。

要解决此问题,您可以编写自己的-std=c++14 -pedantic等效于constexpr;或者你可以使用strlen。或者,您可以使用sizeof并完全避免C风格的字符串处理。

答案 1 :(得分:2)

这只发生在VC ++上的原因是VC ++(显然)是你尝试过的唯一符合C ++标准的编译器。

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