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 ++构造函数指定“内联”的目的是什么?它与函数的含义相同还是具有不同的含义?
它具有完全相同的含义(就像一些程序员一样,他指出ctor是一个与其他函数一样的函数),但是鉴于任何编译器(我能想到的)都会很乐意忽略您的建议(使用他的全部知识来决定是否需要内联) ),那么它又有另一种用途...
实际上,可以在头文件中定义一个函数(或ctor),而不会因一个定义规则而导致链接程序出现错误。
请注意,当函数没有主体时,它将打开另一个场景:以多个翻译单位定义函数。在这种情况下,每个实现都必须相同(AFAIK,如果我错了,请指正我)或它是UB。
简而言之:在头文件中定义一个函数,并在多个转换单元中使用它:链接器错误。将其标记为内联并且错误消失了(这并不意味着该函数已真正内联)。