本文介绍了什么意思是“服从ODR"?在内联和constexpr函数的情况下?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚读到constexpr和内联函数遵循一定义规则,但是它们的定义必须相同.所以我尝试一下:

I just read that constexpr and inline functions obey one-definition rule, but they definition must be identical. So I try it:

inline void foo() {
    return;
}

inline void foo() {
    return;
}

int main() {
    foo();
};

错误:重新定义了"void foo()",

error: redefinition of 'void foo()',
and

constexpr int foo() {
    return 1;
}

constexpr int foo() {
    return 1;
}

int main() {
    constexpr x = foo();
};

错误:'constexpr int foo()'的重新定义

error: redefinition of 'constexpr int foo()'

那么constexpr和内联函数可以服从ODR到底是什么意思?

So what exactly means that, constexpr and inline function can obey ODR?

推荐答案

这是指不同翻译单元中的内联函数.在您的示例中,它们都在同一个翻译单元中.

This is in reference to inline functions in different translations units. In your example they are both in the same translation unit.

草稿C ++标准对此进行了介绍 3.2一个定义规则 [basic.def.odr] 如下:

This is covered in the draft C++ standard 3.2 One definition rule [basic.def.odr] which says:

并包括以下项目符号:

这篇关于什么意思是“服从ODR"?在内联和constexpr函数的情况下?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 17:32