了解C ++类构造函数中的“内联”吗?

des*_*jic 0 c++ constructor inline declaration

我在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);
Run Code Online (Sandbox Code Playgroud)

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

# define BOOST_ASIO_DECL inline
Run Code Online (Sandbox Code Playgroud)

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

那么,为c ++构造函数指定“内联”的目的是什么?它与函数的含义相同还是具有不同的含义?

Adr*_*tti 5

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

实际上,可以在头文件中定义一个函数(或ctor),而不会因一个定义规则而导致链接程序出现错误。

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

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