我下面這個教程 - http://www.learncpp.com/cpp-tutorial/132-function-template-instances/函數模板,並通過引用的區別
// passing all parameters by references
template <typename T1, typename T2>
const T2& add_two_objects(const T1& x,const T2& y) {
return x+y;
};
int main() {
using std::cout;
int x(0),y(0);
std::cout << "Please enter number 1" << std::endl;
std::cin >> x;
std::cout << "Please enter number 2" << std::endl;
std::cin >> y;
cout<< "sum of two integers is " << add_two_objects(x,y+1.2) << '\n';
cout<< "sum of two double is " << add_two_objects(x,y+2.52424324) << '\n';
return 0;
}
程序編譯罰款,但在運行時,我總是得到一個分段錯誤。但是,如果我將模板更改爲按值傳遞,那麼一切正常。
// passing all parameters by value
template <typename T1, typename T2>
const T2 add_two_objects(const T1 x,const T2 y) {
return x+y;
};
任何人都可以請解釋嗎?
您不能返回到一個臨時的參考。但這是非常無意義的代碼,寫得很差。也許你應該找到一個不同的教程? –
@CodyGray至少turial有'使用std :: cout'而不是使用'namespace std;' – user463035818
我修改了教程示例以嘗試更復雜的事情(當然瞭解)我認爲這個教程非常好。 – infoclogged