C++ Constans变量,由函数赋值,用于创建数组C++;
我使用Visual Studio 2012 我的目标: 用户给定数组大小->函数将数据返回常量变量->并创建数组。 有可能吗 以下是我的代码片段:C++ Constans变量,由函数赋值,用于创建数组C++;,c++,arrays,function,constants,C++,Arrays,Function,Constants,我使用Visual Studio 2012 我的目标: 用户给定数组大小->函数将数据返回常量变量->并创建数组。 有可能吗 以下是我的代码片段: const int user_get_array_size() { int a; bool blokada; do { cout << "Podaj wielkość tablicy: "; cin >> a; //Jeśli cin nie mógł zapisać danych do inta.
const int user_get_array_size()
{
int a;
bool blokada;
do
{
cout << "Podaj wielkość tablicy: ";
cin >> a;
//Jeśli cin nie mógł zapisać danych do inta.
//Lub wielkość tablicy mniejsza od 1? (Po co nam analizować coś co ma )
if(cin.fail() || a < 2)
{
blokada = true;
//Czyszczenie Cina z syfów.
//Cin wchodzi char by char
//while(cin)
//{
cin.clear(); //Czyszczenie CINA
//}
cin.ignore();
system("CLS");
cout << "Wielkość tablicy musi być liczą wiekszą od 1 \n(Wkońcu ten program ma coś analizować.) \n";
}
else
{
blokada = false;
}
}
while(blokada);
return a;
}
const int w_array = user_get_array_size();
int tablica[ w_array ];
const int user\u get\u array\u size()
{
INTA;
布尔·布洛卡达;
做
{
cout>a;
//杰利·辛尼·莫戈·扎皮萨·达尼奇·多伊塔。
//Lub wielkośćTablice mniejsza od 1?(Po co nam analizowaćcośco ma)
if(cin.fail()| a<2)
{
布洛卡达=真;
//茨茨泽尼·齐纳兹·西夫沃。
//一个字符接一个字符
//while(cin)
//{
cin.clear();//Czyszczenie CINA
//}
cin.ignore();
系统(“CLS”);
cout如果按如下方式初始化const int w_array
:
const int w_array = 100;
这样就没有问题了,因为编译时已知100
。但是,使用函数返回的值初始化w_数组
,该函数只在运行时已知。因此,不能在数组声明中使用w_数组
,因为需要在编译时知道该值
修复代码的最简单方法是使用std::vector
:
std::vector<int> tablica(w_array);
std::向量tablica(w_数组);
<> >注意,C++中的代码> const 是很难的。当你用一个文字初始化它时,它可以被用在需要常量表达式的上下文中。当你用一个只在运行时知道的值初始化它时,它是只读变量,但它不能用在需要常量表达式的上下文中。
另外,C++11中的constepr
函数也解决了一些问题。但是,visual studio还不支持这一点,而且由于您的代码需要用户输入,因此您将无法使用它。您需要一个编译时常量(或C++11constepr
)对于数组的维数。在本例中,const int
仅在无法修改的意义上是常量。它不是编译时常量。请查看std::vector
或C++14std::dynarray
@juanchopanza或C++14 VLAs。