我有最短的问题:
为什么这在 VS2010 中不起作用?
string keyword("lookuptable");
const int kwSize = keyword.size();
char oldBuffer[kwSize+1];
它在 GCC 中完美运行。 VS2010 告诉我
"expression must have constant value"
我正在使用 Win32 控制台应用程序/空项目。
我没有使用任何特别的东西,只是
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>
using namespace std
它是一个 cpp 文件中的单个主要函数。
最佳答案
数组的大小必须是整数常量表达式或 ICE(这意味着它必须在编译时已知)。您可以在 ICE 中使用 const int
,但前提是它的初始化器本身就是 ICE。
函数调用,如 keyword.size()
在 ICE 中不可用,因此 kwSize
在 ICE 中不可用。
如果它在 gcc 中“完美运行”,则可能是由于错误或某种语言扩展。
在C++0x中,有些函数调用可以用在整型常量表达式中,但必须是constexpr
函数,并且有使用限制。据我所知,还没有编译器完全支持 constexpr
。在任何情况下,std::string::size
都不是 constexpr
。
关于c++ - VS2010中的常量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485601/