我问这个问题是因为我还没有弄清楚如何通过谷歌搜索它。
问题是,如果我的图书馆中有这样的东西:
#ifdef PROVIDE_DEFAULT_ARG
#define DEFAULT_ARG(v) = v
#else
#define DEFAULT_ARG()
#endif
void Foo(int a, int b DEFAULT_ARG(1));
并且在没有定义PROVIDE_DEFAULT_ARG
的情况下编译库,然后使用该库的程序在定义它的情况下编译(反之亦然),这是否违反了一个定义规则?
最佳答案
ODR 仅当您有多个定义时才适用。默认参数只有一个定义:在使用库的程序中。它不可能与库的翻译单元冲突,因为库的翻译单元没有默认参数的任何定义。
关于c++ - 默认函数参数和单一定义规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76059500/