2012-02-01 2 views
0

Я просто хотел знать, почему я должен делать переменные, которые я передаю в шаблоны функций, должен быть const?Почему ключевое слово const является обязательным для определения параметров шаблона?

пример: -

#include <iostream> 
    using std::cout; 
    using std::endl; 

    template< typename T> 
    void printArray(T *array, int count) 
    { 
     for (int i = 0; i < count; i++) 
     cout << array[ i ] << " "; 
     cout << endl; 
    } 

    int main() 
    { 
    const int ACOUNT = 5; // size of array a 
    const int BCOUNT = 7; // size of array b 
    const int CCOUNT = 6; // size of array c 

    int a[ ACOUNT ] = { 1, 2, 3, 4, 5 }; 
    double b[ BCOUNT ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; 
    char c[ CCOUNT ] = "HELLO"; // 6th position for null 

    cout << "Array a contains:" << endl; 

    // call integer function-template specialization 
    printArray(a, ACOUNT); 

    cout << "Array b contains:" << endl; 

    // call double function-template specialization 
    printArray(b, BCOUNT); 

    cout << "Array c contains:" << endl; 

    // call character function-template specialization 
    printArray(c, CCOUNT); 
    return 0; 
    } 

Здесь в главной функции: - я объявить переменные

const int ACOUNT = 5; // size of array a 
const int BCOUNT = 7; // size of array b 
const int CCOUNT = 6; // size of array c 

в const. Если я не объявляю их как const, я бы получил ошибку «Uninitialized array».

Может кто-нибудь, пожалуйста, сообщите мне, если это правило, что параметры, отправленные в функциональные шаблоны, должны иметь тип const?

ответ

4

Я просто хотел знать, почему я должен делать переменные, которые я передаю в шаблоны функций, должен быть const?
Нет, вам не нужно, проблема кроется в другом месте.

В C++ вам не разрешено иметь Variable Length Arrays(VLA).
Следовательно, когда вы объявляете массив, длина должна быть объявлена ​​как постоянная времени компиляции.

const int ACOUNT = 5; // size of array a 
const int BCOUNT = 7; // size of array b 
const int CCOUNT = 6; // size of array c 

int a[ ACOUNT ] = { 1, 2, 3, 4, 5 }; 
double b[ BCOUNT ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; 
char c[ CCOUNT ] = "HELLO"; // 6th position for null 

В приведенном выше примере, Без const, ваши массивы будут получать объявлены как VLA и что не разрешено в C++.

Смежные вопросы