了解类构造函数中的"内联"C++?

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

本文关键字:内联 C++ 构造函数 了解      更新时间:2023-10-16

我在 boost 库中读取了类 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++ 构造函数指定"内联"的目的是什么?它与函数的含义相同还是具有不同的含义?

它具有完全相同的含义(正如一些程序员指出的那样,ctor与其他任何函数一样(,但是鉴于任何编译器(我能想到(都会很乐意忽略您的建议(决定是否需要内联或不使用他的所有知识(,那么它必须有另一种用途......

事实上,它可以在头文件中定义一个函数(或ctor(,而不会因为一个定义规则而引发链接器的错误。

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

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