繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM