Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类中定义的函数总是内联的吗?_C++_Inline Functions - Fatal编程技术网

C++ 类中定义的函数总是内联的吗?

C++ 类中定义的函数总是内联的吗?,c++,inline-functions,C++,Inline Functions,根据一些书,类中定义的函数(以及标题中的定义)总是内联的。这是真的吗 我们如何使用test app创建这样的场景?是的,的确如此,类中定义的成员函数是隐式内联声明的。但是inline只是您给编译器的一个建议。编译器可以忽略它 如果您想了解不同情况下会发生什么,您可以阅读类定义中定义的汇编程序函数被隐式标记为inline [C++11:9.3/2]:成员函数可以在其类定义中定义(8.4),在这种情况下,它是一个内联成员函数(7.1.2),或者如果它已经声明但没有在其类定义中定义,则可以在其类定义之

根据一些书,类中定义的函数(以及标题中的定义)总是内联的。这是真的吗


我们如何使用test app创建这样的场景?

是的,的确如此,类中定义的成员函数是隐式内联声明的。但是
inline
只是您给编译器的一个建议。编译器可以忽略它


如果您想了解不同情况下会发生什么,您可以阅读类定义中定义的汇编程序函数被隐式标记为
inline

[C++11:9.3/2]:
成员函数可以在其类定义中定义(8.4),在这种情况下,它是一个内联成员函数(7.1.2),或者如果它已经声明但没有在其类定义中定义,则可以在其类定义之外定义。[……]

这并不是说它们将被内联

inline
关键字对存储持续时间和链接要求有影响,必须遵守这些要求

[C++11:7.1.2/2]:
带有
内联
说明符的函数声明(8.3.5、9.3、11.3)声明内联函数。内联说明符向实现表明,在调用点对函数体进行内联替换要优于通常的函数调用机制。在调用点执行此内联替换不需要实现;但是,即使省略了此内联替换,也应遵守7.1.2中定义的内联函数的其他规则

但是,现在,编译器将根据自己的度量来决定是否实际内联函数,而不是基于
inline
关键字的存在与否(因为,坦率地说,现在编译器最清楚)

我不知道您心目中的“测试应用程序”是什么,但代码中的示例非常简单:

struct T
{
   void foo() {}  // implicitly `inline`
};

我们如何使用测试应用程序创建这样的场景?--你能澄清一下你的意思吗?显然,您可以在测试应用程序的类中定义函数。什么是测试应用程序测试?类函数(静态)始终是内联的?给我的新闻…@MartinJames什么是静态函数?关键字
inline
不仅仅用于内联。它还告诉编译器,此函数可以在不同的翻译单元中有多个定义。如果我们考虑该属性,您肯定类方法总是声明为代码>内联< /代码>吗?编译器不能“忽略”<代码>内联关键字。但它可能不会使用它的存在或不存在来确定函数是否得到物理内联。(其他事情肯定还会发生。)@KABoissonneault是的,我们确信