我在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)
那么,指定"内联&#34>的目的是什么?对于c ++构造函数?它与函数的含义相同还是有不同的含义?
答案 0 :(得分:4)
它具有完全相同的含义(因为某些程序员dude 注意到ctor是一个像其他任何函数一样的函数)但是考虑到任何编译器(我能想到)都会高兴地忽略你的建议(来决定)如果内联是否需要使用他的所有知识)那么它必须有另一种用途......
实际上,由于一个定义规则,它会在头文件中定义一个函数(或ctor)而不会出现链接器引发的错误。
请注意,当函数没有正文时,它会打开另一个场景:在多个翻译单元中定义函数。在这种情况下,每个实现必须是相同的(AFAIK,如果我错了,请纠正我)或它的UB。
简而言之:在头文件中定义一个函数,并在多个转换单元中使用它:链接器错误。将其标记为内联并且错误消失(并且它不会暗示函数是真正内联的)。