使用const integer声明数组 我试图在C++中声明 int 数组,并发现了这个问题。以下代码在g++编译器上运行良好,但在Visual Studio上编译失败。我跟踪Bruce Eckel发现了这个代码 #include<iostream> int main() { const int j = std::cin.get(); char buf[j]; } #包括 int main() { const int j=std::cin.get(); char-buf[j]; }
我理解,保持使用const integer声明数组 我试图在C++中声明 int 数组,并发现了这个问题。以下代码在g++编译器上运行良好,但在Visual Studio上编译失败。我跟踪Bruce Eckel发现了这个代码 #include<iostream> int main() { const int j = std::cin.get(); char buf[j]; } #包括 int main() { const int j=std::cin.get(); char-buf[j]; },c++,arrays,constants,C++,Arrays,Constants,我理解,保持j只是一个int将是一个问题。由于j的值在运行时是常量,因此应该编译程序。如果我错了,请改正我。 < P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是 因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。 < P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是 因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。 < p>你
j
只是一个int
将是一个问题。由于j
的值在运行时是常量,因此应该编译程序。如果我错了,请改正我。 < P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是
因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。
< P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。
< p>你试图定义<代码> BUF作为A。这是C(而不是C++)的一个特性,g++
支持它作为非标准扩展。显然,您的其他编译器不支持它
我建议将
buf
转换为std::vector
(或者实际上是std::string
?)您试图将buf
定义为。这是C(而不是C++)的一个特性,g++
支持它作为非标准扩展。显然,您的其他编译器不支持它
我建议将buf
转换为std::vector
(或者确实是std::string
?)
由于在运行时,j
的值将是const
,因此应该编译程序
不,这里与j
的const
无关。C++目前只支持静态大小的C数组。它的大小必须是编译时常量
如果需要动态大小的数组,请使用std::vector
默认情况下,g++编译这段代码的事实有点令人遗憾(为了兼容性)。在使用g++时,应该使用-pedantic
标志,以确保没有启用此类编译器扩展(使用编译器扩展本身当然不错,但在这种情况下没有任何好处)
由于在运行时,j
的值将是const
,因此应该编译程序
不,这里与j
的const
无关。C++目前只支持静态大小的C数组。它的大小必须是编译时常量
如果需要动态大小的数组,请使用std::vector
默认情况下,g++编译这段代码的事实有点令人遗憾(为了兼容性)。在使用g++时,您应该使用
-pedantic
标志,以确保未启用此类编译器扩展(使用编译器扩展本身当然不错,但在这种情况下没有任何好处)。我也遇到了同样的问题。似乎很难创建其长度存储为变量的数组。我所做的是创建一个附加函数:
void Class:: initMyArray(const int size) {
myArray = new int[size]
}
现在,你只需要调用这个函数并给它你的变量。我不确定这是否是一个合适的解决方案(虽然我不是C++专家)。< P>我也有同样的问题。似乎很难创建其长度存储为变量的数组。我所做的是创建一个附加函数:
void Class:: initMyArray(const int size) {
myArray = new int[size]
}
现在,你只需要调用这个函数并给它你的变量。我不确定这是否是一个合适的解决方案(虽然我不是C++专家)。您的回答非常有用。请使用
-pedantic errors
或-pedantic-Werror
禁用扩展。使用-pedantic
获取有关使用扩展的警告。谢谢。您的回答非常有用。请使用-pedantic errors
或-pedantic-Werror
禁用扩展。使用-pedantic
获取有关使用扩展名的警告。以前曾询问过此问题。See const是意图的声明,而不是事实的创造。编译器无法在编译时神奇地确定如何在此处调整buf数组的大小。const的概念是,如果您稍后试图修改声明为const的值,则会生成一个错误,从而束缚您的纪律。有些人认为这是最好避免的拐杖。请注意,j
不是一个常量表达式,如果您使用了const int j=10
,它会起作用。这是以前提出过的问题。See const是意图的声明,而不是事实的创造。编译器无法在编译时神奇地确定如何在此处调整buf数组的大小。const的概念是,如果您稍后试图修改声明为const的值,则会生成一个错误,从而束缚您的纪律。有些人认为这是最好避免的拐杖。请注意,j
不是一个常量表达式,如果您使用了const int j=10
,它会起作用。