如果成员函数同时出现内联和非内联,编译器会做什么

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?是否有必要提供非内联版本,因为编译器可以选择内联或不内联函数?

inline 使编译器可以多次查看函数(或变量)。但每次都必须相同,否则就是未定义的行为。

它破坏了 ODR。对于内联函数,每个编译单元可能只有一个定义。程序可以包含多个定义,只要每个定义出现在不同的翻译单元中即可。您演示的代码格式错误,尽管某些编译器可能会在宽松的规则下接受它。