c++ - VS2010中的常量问题

标签 c++ visual-studio visual-studio-2010 gcc

我有最短的问题:

为什么这在 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/

相关文章:

c++ - Delphi 中 C++ `const` 返回类型的等价物是什么

c++ - 链接问题 : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

visual-studio - 从整个项目/解决方案中删除未使用的命名空间

.net - .NET 4.0运行时是否比.NET 2.0运行时慢?

.net - 在使用 ILMerge/Costura 组合程序集后,有什么方法可以让 VS (2010) 接受 PDB?

C++ 自动为 boost::make_shared 生成包装器

c++ - 关于函数不在全局命名空间中的 Visual Studio 警告

visual-studio - 在解决方案级别抑制 FxCop 警告

visual-studio-2010 - 附加到流程问题

C++迭代组合函数不起作用