【发布时间】:2017-06-16 16:21:21
【问题描述】:
我正在关注本教程 - 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 至少有一个
using std::cout而不是using namespace std; -
我修改了教程例子来尝试更复杂的东西(当然是为了理解)我觉得教程还不错。
标签: c++ reference temporary-objects