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