了解C++ class 构造函数中的"inline"?

Understanding of "inline" in C++ class constructor?

我在 boost 库中阅读了 class address_v4 的源代码,并且有几个用 BOOST_ASIO_DECL 声明的构造函数(定义为内联)

/// Construct an address from raw bytes.
BOOST_ASIO_DECL explicit address_v4(const bytes_type& bytes);

/// Construct an address from a unsigned long in host byte order.
BOOST_ASIO_DECL explicit address_v4(unsigned long addr);

(从这里 http://www.boost.org/doc/libs/1_64_0/boost/asio/ip/address_v4.hpp

# define BOOST_ASIO_DECL inline

(从这里 http://www.boost.org/doc/libs/1_64_0/boost/asio/detail/config.hpp

那么,为 C++ 构造函数指定 "inline" 的目的是什么?它与函数的含义相同还是具有不同的含义?

它具有完全相同的含义(因为 一些程序员兄弟 指出 ctor 是一个与其他任何函数一样的函数)但是考虑到任何编译器(我能想到的)都会很乐意忽略你的建议(决定是否需要内联或不使用他所有的知识)然后它必须有另一种用途......

事实上,它可以在您的头文件中定义一个函数(或 ctor),而不会因为一个定义规则.

而引发链接器错误

请注意,当函数没有主体时,它会打开另一种情况:在多个翻译单元中定义函数。在这种情况下,每个实现都必须相同(AFAIK,如果我错了请纠正我)或者它是 UB。

简而言之:在头文件中定义一个函数并在多个翻译单元中使用它:链接器错误。将其标记为内联并且错误消失了(这并不意味着该函数确实是内联的)。