[英]What does the compiler do if a member function appears both inline and non-inline
我得到的处理代码以这种形式出现。
// foo.h
class Foo {
public:
int baz() const;
};
inline int Foo::baz() const { // return whatever }
// foo.cpp
#include "foo.h"
int Foo::baz() const { // same as above }
编译器选择使用哪个Foo::baz
? 由于编译器可以选择内联函数还是不内联函数,是否甚至需要提供非内联版本?
它打破了ODR。 对于内联函数,每个编译单元只能有一个定义。 程序可以包含多个定义,只要每个定义出现在不同的翻译单元中即可。 您演示的代码格式错误,尽管某些编译器可能会在宽松的规则下接受它。
inline
使编译器可以多次查看该函数(或变量)。 但是每次都必须相同,否则它是未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.