无法在 gdb 中使用引用参数调用函数
Cannot call function with reference parameter in gdb
对于此函数:
void foo_ref(const int& i)
{
cout << i << endl;
}
当我在 gdb 中调用它时它失败了:
(gdb) call foo_ref(5)
Attempt to take address of value not located in memory.
当然,在这个简单的示例中,没有必要使用引用作为参数。 如果我使用普通的"int",那就没问题了。
实际上,真正的示例是一个模板函数,如下所示:
template<class T>
void t_foo_ref(const T& i)
{
cout << i << endl;
}
当"T"是"int"时,我遇到了上面提到的问题。
它是 gdb 中的错误吗? 或者我可以在 gdb 中调用这样的函数吗?
这是可能的,尽管不是以直观的方式(我仍然会将其归类为错误)。
您需要一个实际的内存区域(变量或堆分配的内容)。
(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)
5 是一个文字,当您将其传递给函数时,编译器会尝试将其存储在为函数参数 i 分配的地址中。但是由于 i 是一个参考,因此没有 5 可以存储在内存中的位置,因此您的错误。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用