my_lib.a和my_prog中编译的与my_lib.a链接的my_prog头文件。库是在没有NDEBUG的情况下编译的,而my_prog是用NDEBUG编译的。它会导致ODR违规吗?my_lib.so是一个共享库呢?当然,ODR在这里是不相关的,因为有两个单独的可执行文件,但是NDEBUG是否会影响std (或其他)类,从而阻止它们通过SO接口正确地传递它们的实例?例如,如果std::vector实例是在my_prog中创建的,那么它是否可以作为参数传递给SO?NDEBUG会影响内存分配等吗?标准是否指定了这一点?
发布于 2019-08-13 06:31:17
20.5.2.2头using.headers
<cassert>或<assert.h>的效果取决于NDEBUG的词汇电流定义之外。它保证不会成为标准标头的问题,但是您突出显示的问题是是否适用于您自己提供的源文件中的函数。
6.2单定义规则basic.def.odr
..。D的每个定义都应包含相同的令牌序列;
注意,标记化发生在预处理之后,因此如果定义包含任何assert,则必须对相同的令牌序列进行预处理,即在编译期间必须具有相同的NEDBUG设置。
https://stackoverflow.com/questions/57472181
复制相似问题