Как преобразовать int в const int для назначения размера массива в стеке?
Я пытаюсь выделить фиксированный размер в стеке для целочисленного массива
#include<iostream>
using namespace std;
int main(){
int n1 = 10;
const int N = const_cast<const int&>(n1);
//const int N = 10;
cout<<" N="<<N<<endl;
int foo[N];
return 0;
}
Однако это дает ошибку в последней строке, где я использую N
для определения фиксированного
error C2057: expected constant expression
.
Однако, если я определяю N
как const int N = 10
, код компилируется просто отлично.
Как мне следует прибегнуть к n1
, чтобы передать его как const int
?
Я пробовал: const int N = const_cast<const int>(n1)
, но это дает ошибку.
EDIT: Я использую MS VС++ 2008 для компиляции этого... с g++ он компилируется отлично.
Ответы
Ответ 1
Как мне выбрать n1
для обработки его как const int
?
Вы не можете, не для этой цели.
Размер массива должен быть тем, что называется интегральным константным выражением (ICE). Значение должно быть вычислимым во время компиляции. A const int
(или другой объект с целым целым const-типом) может использоваться в интегральном выражении константы, только если он сам инициализируется интегральным константным выражением.
Неконстантный объект (например, n1
) не может появляться нигде в интегральном константном выражении.
Считаете ли вы использование std::vector<int>
?
[Примечание. Бросок полностью не нужен. Оба из них одинаковы:
const int N = n1;
const int N = const_cast<const int&>(n1);
- Заключительная записка]
Ответ 2
Можно назначить только массивы фиксированного размера. Либо распределите память динамически (int* foo = new int[N];
) и удалите ее, когда вы закончите, либо (предпочтительно) используйте std::vector<int>
вместо этого.
(Edit: GCC принимает это как расширение, но не является частью стандарта С++.)