我有一個數學向量,其尺寸由模板參數int N
定義。問題是,我在構造函數中添加了多達N = 9的參數,但g ++對此卻沒有問題,但英特爾編譯器正在抱怨此警告:在英特爾編譯器的特定位置禁用警告
警告#175:下標超出範圍
是的,下標越界,因爲它出現,但沒有,它不是要造成一個問題,因爲它是這樣寫的:
template <int N, typename T>
Vector<N,T>::Vector(T val0, T val1, T val2, T val3, T val4, T val5, T val6, T val7, T val8, T val9)
{
for(int i = 0; i < N; i++)
{
_values[i] = T();
}
_values[0] = val0;
if(N > 1)
_values[1] = val1;
if(N > 2)
_values[2] = val2;
if(N > 3)
_values[3] = val3;
if(N > 4)
_values[4] = val4;
if(N > 5)
_values[5] = val5;
if(N > 6)
_values[6] = val6;
if(N > 7)
_values[7] = val7;
if(N > 8)
_values[8] = val8;
if(N > 9)
_values[9] = val9;
}
其中N是維度,就像我提到的,T是數據類型。所以英特爾編譯器不夠聰明,認識到這不會引起任何問題,因爲除非索引有效,否則我不訪問該元素。
現在的問題是:我怎樣才能告訴編譯器像宏/預編譯命令,它不應該發出這些行警告#175?請注意,禁用警告#175完全不會很聰明,儘管我仍然可以在別處做一個真正的錯誤;我只是想在這段代碼中禁用它。
謝謝你的努力。
gcc使用'#pragma GCC診斷類型選項'。 msvc使用'#pragma warning(disable:number)'。他們都有推/流行在特定區域工作。我不知道icc是使用其中的一種還是使用它自己的語法。 – Jarod42
爲什麼不傳遞一個大小爲「N」而不是N個參數的數組? – Mario
@Mario,因爲用戶將無法直接輸入元素,這正是我所需要的。 –