如果成员函数同时出现内联和非内联,编译器会做什么
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。对于内联函数,每个编译单元可能只有一个定义。程序可以包含多个定义,只要每个定义出现在不同的翻译单元中即可。您演示的代码格式错误,尽管某些编译器可能会在宽松的规则下接受它。
我获得了此表单中显示的代码。
// 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。对于内联函数,每个编译单元可能只有一个定义。程序可以包含多个定义,只要每个定义出现在不同的翻译单元中即可。您演示的代码格式错误,尽管某些编译器可能会在宽松的规则下接受它。