1
我有一個簡單的程序是這樣的:C++模板用法:改變變量的地方會導致編譯錯誤
$貓testCompile.cpp
#include<stdio.h>
int fd[2];
template<int fd[]>
void f(){printf("fd\n");}
int main(){
f<fd>();
return 0;
}
編譯並運行它,沒有問題,它只是打印「fd」。但是,如果我改變FD [2]的位置爲主要功能則無法編譯:
#include<stdio.h>
template<int fd[]>
void f(){printf("fd\n");}
int main(){
int fd[2];
f<fd>();
return 0;
}
鐺報道:
testCompile.cpp:6:5: error: no matching function for call to 'f'
f<fd>();
^~~~~
testCompile.cpp:3:6: note: candidate template ignored: invalid
explicitly-specified argument for template parameter 'fd'
void f(){printf("fd\n");}
^
1 error generated.
這個錯誤是什麼指示?哪裏不對了?
對不起,數組在這種情況下會衰減指針;) –
我認爲模板是基於對象的數據類型而不是由對象的位置實例化的。如果是這種情況,那麼局部變量和全局變量之間沒有區別。 –
我看,它會吐出錯誤,因爲它將無法找到局部變量在內存中分配的位置,但我不瞭解全局變量。 –