C++ 无法使用gdb中的引用参数调用函数

C++ 无法使用gdb中的引用参数调用函数,c++,gdb,C++,Gdb,对于此功能: void foo_ref(const int& i) { cout << i << endl; } 当然,在这个简单的示例中,不需要使用引用作为参数。如果我使用正常的“int”,那么就没有问题了。 实际示例是一个模板函数,如下所示: template<class T> void t_foo_ref(const T& i) { cout << i << endl; } 模板 无效t_foo_ref

对于此功能:

void foo_ref(const int& i)
{
  cout << i << endl;
}
当然,在这个简单的示例中,不需要使用引用作为参数。如果我使用正常的“int”,那么就没有问题了。
实际示例是一个模板函数,如下所示:

template<class T>
void t_foo_ref(const T& i)
{
  cout << i << endl;
}
模板
无效t_foo_ref(常数t&i)
{

cout5是一个文本,当您将其传递给函数时,编译器会尝试将其存储在为函数参数i分配的地址中。但由于i是一个引用,因此内存中没有存储5的位置,因此您的错误是存在的。

这是可能的,尽管不是以直观的方式(我仍然将其归类为错误)

您需要一个实际的内存区域(一个变量或一些堆分配的东西)

(gdb)p(int*)malloc(sizeof(int))
$8=(整数*)0x804b018
(gdb)p*(int*)0x804b018=17
$9 = 17
(gdb)p t_foo__ref((常量int&)*(常量int*)0x804b018)
17
$10=无效
(gdb)
template<class T>
void t_foo_ref(const T& i)
{
  cout << i << endl;
}
(gdb) p (int *) malloc(sizeof(int))
$8 = (int *) 0x804b018
(gdb) p * (int *) 0x804b018 = 17
$9 = 17
(gdb) p t_foo_ref<int>((const int&) * (const int *) 0x804b018 )
17
$10 = void
(gdb)