【发布时间】:2011-04-28 22:10:06
【问题描述】:
我知道根据定义,内联成员函数应该放在标题中。但是,如果不可能将函数的实现放入头文件中怎么办?让我们来看看这种情况:
文件 A.h
#pragma once
#include "B.h"
class A{
B b;
};
文件 B.h
#pragma once
class A; //forward declaration
class B{
inline A getA();
};
由于包含通知,我必须将getA 的实现放入
B.cpp
#include "B.h"
#include "A.h"
inline A B::getA(){
return A();
}
编译器会内联getA吗?如果是这样,哪个内联关键字是重要的(标题中的关键字或 .cpp 文件中的关键字)?是否有另一种方法可以将内联成员函数的定义放入其 .cpp 文件中?
【问题讨论】:
-
你是不是有错误的印象,认为关键字inline的意思是编译器生成内联汇编而不是进行函数调用?
-
不-我知道应该发生什么
-
你确定。你认为应该发生什么?
-
@Mat.不。就内联代码而言,这没有任何意义。这只是一个提示(所有现代编译器都忽略了)。编译器不需要做任何事情。无论是否使用关键字“inline”,编译器都会分析所有函数以进行潜在内联。
-
是的,我知道这只是一个提示——反正你说关键字“inline”已经过时了?
标签: c++ function inline member