c++ - 默认函数参数和单一定义规则

标签 c++ default-arguments one-definition-rule

我问这个问题是因为我还没有弄清楚如何通过谷歌搜索它。

问题是,如果我的图书馆中有这样的东西:

#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/

相关文章:

c++ - 我不明白 [dcl.fct.default]/3 中的最后一句

c++ - 头文件中定义的非内联虚函数

c++ - std::string 在类对象内部的函数中传递时丢失值

c++ - Eigen :如何将未知大小的矩阵存储为类中的成员?

c++ - 在查找 namespace 名称期间可以考虑哪些其他名称,而不是 namespace 名称?

c++ - 类构造函数中的模板和使用(#define)

c++ - 通过引用传递未知大小的多维数组

c++ - 如何确定用户是否为默认参数指定了值?

c++ - 为什么在源文件中特化模板不会导致错误?

c++ - 一条定义规则 : Can corresponding entities have different names?