小编oka*_*api的帖子

用 `= default` 声明的函数是否应该只放在头文件中

定义类时,现在通常= default用于析构函数/复制构造函数和复制赋值。查看我的代码库,这些几乎总是只在头文件中,但有些同事已将它们放在.cpp文件中。在这种情况下,最佳做法是什么?

编译器是否在标头中多次生成这些函数并依靠链接器对它们进行重复数据删除。.cpp如果你有一个很大的班级,也许只值得把它们放在文件中?对于我们大部分是旧的 C++98 代码,什么都不做的函数通常也只在头文件中定义。什么都不做虚拟析构函数似乎经常被移动到.cpp文件中。对于需要它们的地址来填充虚拟方法表的虚拟方法来说,它是否(或曾经)在某种程度上很重要。

还建议noexcept()= default函数上放置子句吗?编译器似乎是自己派生的,因此它仅在存在时用作 API 文档。

c++ c++11

7
推荐指数
3
解决办法
241
查看次数

暂停过程以留出时间供调试器附加

我想将gdb附加到一个无法轻易控制该进程启动的进程,因为它是从inetd运行的,并且该进程完成得太快而无法在启动后就可以附加到该进程。

我想做的是在要开始调试的特定点插入一些代码。理想情况下,该代码将等待调试器附加然后继续。我已经尝试过入睡,但是要选择足够长的延迟以使我有时间去捕捉它,但是要足够短以免在挂接到gdb后等待它过去,不要太麻烦。

为此,是否有更好的代码选择来插入或调用?

debugging gdb

2
推荐指数
1
解决办法
720
查看次数

使用链接描述文件重命名符号

是否可以使用链接描述文件或映射文件来重命名符号?我正在尝试修改一些用C ++和Fortran混合编写的代码,以便它可以在Linux上与多个Fortran编译器一起使用。目前,它是为Solaris Studio编译器编写的,并且启用了区分大小写的选项。我想自动处理Fortran符号名称的变化(例如来自Makefile)。

似乎确实可以创建别名,因此,包含以下内容的链接描述文件:

C_Function_ = c_function;
Run Code Online (Sandbox Code Playgroud)

将工作。不幸的是,添加-T选项以引用此脚本会导致其他行为更改,由于找不到libdl.so.2 / librt.so.1,我得到了错误。我需要包括某种默认的链接描述文件吗?我已经尝试过在Linux上使用bfd和gold链接器。

linker ld linker-scripts

2
推荐指数
1
解决办法
1587
查看次数

标签 统计

c++ ×1

c++11 ×1

debugging ×1

gdb ×1

ld ×1

linker ×1

linker-scripts ×1