gpt4 book ai didi

c++ - 混合 NDEBUG - 安全吗?

转载 作者:行者123 更新时间:2023-11-30 04:44:57 28 4
gpt4 key购买 nike

  1. 考虑在 my_lib.a 和与 my_lib.a 链接的 my_prog 中编译的 C++ 头文件。该库是在没有 NDEBUG 的情况下编译的,而 my_prog - 有 NDEBUG。会导致 ODR 违规吗?
  2. 如果 my_lib.so 是共享库怎么办?当然,ODR 在这里是无关紧要的,因为有 2 个独立的可执行文件,但是 NDEBUG 可能会影响 std(或其他)类,从而阻止通过以下方式正确传递它们的实例所以接口(interface)?例如。如果 std::vector 实例是在 my_prog 中创建的,它可以作为参数传递给 SO 吗? NDEBUG 可能会影响内存分配等吗?

标准对此有规定吗?

最佳答案

20.5.2.2 Headers [using.headers]

  1. A translation unit may include library headers in any order (Clause 5). Each may be included more than once, with no effect different from being included exactly once, except that the effect of including either <cassert> or <assert.h> depends each time on the lexically current definition of NDEBUG.

保证不会成为标准 header 的问题,但是您突出显示的问题确实适用于您自己提供的源文件中的函数。

6.2 One-definition rule [basic.def.odr]

  1. There can be more than one definition of a class [function/enum/variable/etc] provided the definitions satisfy the following requirements:

[...] each definition of D shall consist of the same sequence of tokens;

请注意标记化发生在 预处理之后,因此如果定义包含任何 assert ,这必须预处理到相同的标记序列,即必须具有相同的 NEDBUG编译时设置。

关于c++ - 混合 NDEBUG - 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57472181/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com