2014-07-15 59 views
0

在以下代碼中,我需要將std::array的大小作爲函數參數。我首選std::arraystd::vector,因爲容器的大小不應該改變。但是,編譯器抱怨爲error: ‘n’ is not a constant expression。如何通過函數參數獲取數組的大小?獲取std :: array的第二個參數(大小)作爲函數參數

main.cpp中:

#include <iostream> 
#include <array> 

using namespace std; 

void fnc(const int n) 
{ 
    array<int,n> a; 
} 

int main() 
{  
    fnc(5);  

    return 0; 
} 
+0

模板參數必須是在編譯時已知值的表達式,因爲它們成爲模板特化類型的一部分。因此,函數參數不能用作模板參數。這反映'array '的大小固定在* compile-time *。 – dyp

+0

如果你想有一個不允許大小變化的數據結構,你可以編寫一個簡單的'std :: vector'包裝器。 – dyp

+0

@Shibli你的例子沒有顯示你用正確的參數調用'fnc'。你打算如何使用它? – Pradhan

回答

3

你不能。數組的大小必須是常量表達式 - 這意味着在編譯期間必須知道它的大小。如果它是一個函數參數,這是不可能的,因爲函數可以用任何參數調用。使用std :: vector - 很可能你不會看到任何性能差異。

0

函數參數不是常量表達式。使用模板參數來代替:

template<int n> 
void fnc() 
{ 
    std::array<int, n> a; 
} 

int main() 
{ 
    fnc<5>(); 
} 
0

你想用一個模板函數這樣

template <size_t N> 
void func() 
{ 
array<int, N> a; 
} 

int main() 
{ 
func<5>(); 
return 0; 
} 

這隻要可以作爲您要創建在編譯時已知的std::array的大小。

相關問題