- 主题:问个函数定义顺序的问题
大胆简化一下:假如 header1.h中定义了以下两个函数:
void fun1() {std::cout << "good" << std::endl;}
void fun3() {fun2();
然后在header2.h中定义了以下函数:
void fun2() {fun1();}
那么如果按照先header1后header2的顺序,则fun3找不到fun2报错;如果先header2后header1,则fun2找不到fun1报错。实际当中是怎么搞的?
--
FROM 106.44.3.*
C++ 头文件的规范做法是不能放函数定义,除非内联
【 在 wanllow 的大作中提到: 】
: 大胆简化一下:假如 header1.h中定义了以下两个函数:
: void fun1() {std::cout << "good" << std::endl;}
: void fun3() {fun2();
: ...................
--
FROM 117.143.146.*
body定义在hpp里的类的成员函数默认就是inline的
新的c++标准允许头文件里定义的变量用inline。MSVC以前是通过编译器的私有扩展__declspec(selectany)来实现只link变量的一份copy的。
【 在 ylh0315 的大作中提到: 】
: .h是放声明用的,不能放定义。
: 不过,C++经常在.hpp里定义类,不知道怎么防止重复定义。
--
FROM 221.218.161.*
语法分析在cpp预处理之后,hpp头文件没有专门的规则吧。模板自动inline,其他显式inline。
【 在 z16166 的大作中提到: 】
: body定义在hpp里的类的成员函数默认就是inline的
:
: 新的c++标准允许头文件里定义的变量用inline。MSVC以前是通过编译器的私有扩展__declspec(selectany)来实现只link变量的一份copy的。
: ...................
--
FROM 221.216.116.*
嗯,跟在哪个文件里没关系,只要member function的body在class的声明里就是inline(有例外)
所以body在hpp里的member function也是inline的
cppreference上的:
A function defined entirely inside a class/struct/union definition, whether it's a member function or a non-member friend function, is implicitly an inline function unless it is attached to a named module(since C++20).
【 在 milksea 的大作中提到: 】
: 语法分析在cpp预处理之后,hpp头文件没有专门的规则吧。模板自动inline,其他显式inline。
--
FROM 221.218.161.*
百度 cross reference
--
FROM 36.21.224.*