參照下面的代碼函數和函數指針在C++
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
void function() {
cout << "Hello World" << endl;
}
int main() {
vector<void (*)()> functions;
functions.push_back(function); // (1) no error
functions.push_back(&function); // (2) no error
for (const auto& func : functions) {
func();
}
// vector<decltype(function)> vec; // (3) error
return 0;
}
似乎當我取消(3),我只是想了解這背後的原因是一個錯誤。當我傳遞一個函數作爲模板函數的參數時,它是否將類型解析爲函數指針?編譯器將所有函數類型推導爲函數指針是合理的,但爲什麼decltype()不解析爲函數指針呢?
我沒有一個答案,但我建議使用'std :: function'而不是函數指針。它更具可讀性,並且不會處理它是否是指針。 –
@AdiLevin'std :: function'應該只在需要的時候使用,也就是當一個真正想要存儲(!)沒有共同但可以被調用的調用(使用相應的參數,返回相應的類型)時。它增加了很多開銷。 –