草庐IT

c++ - 现代 C++ 编译器可以内联 cpp 文件中定义的函数吗

我知道关键字inline具有有用的属性,例如用于将模板特化保存在头文件中。另一方面,我经常读到inline作为编译器实际内联函数的提示几乎毫无用处。此外,该关键字不能在cpp文件中使用,因为编译器希望在调用时检查标有inline关键字的函数。因此,我对现代编译器(即gcc4.43)的“自动”内联功能有点困惑。当我在cpp中定义一个函数时,如果编译器认为内联对函数有意义,或者我是否剥夺了他的一些优化能力,编译器是否可以内联它?(这对于大多数函数来说都很好,但对于经常调用的小函数来说很重要) 最佳答案 在编译单元内,编译器不会有问题的内

c++ - C++ 的内联不是完全可选的吗?

我有一个具有内联成员的类,但后来我决定要从头文件中删除实现,因此我将函数的成员主体移到cpp文件中。起初我只是将内联签名留在头文件中(我马虎),程序无法正确链接。然后我修复了我的标题,当然一切正常。但内联不是完全可选的吗?在代码中:第一://Class.hclassMyClass{voidinlinefoo(){}};下一个改为(不会链接)://Class.hclassMyClass{voidinlinefoo();};//Class.cppvoidMyClass::foo(){}然后到(会正常工作)://Class.hclassMyClass{voidfoo();};//Class.

c++ - C++ 的内联不是完全可选的吗?

我有一个具有内联成员的类,但后来我决定要从头文件中删除实现,因此我将函数的成员主体移到cpp文件中。起初我只是将内联签名留在头文件中(我马虎),程序无法正确链接。然后我修复了我的标题,当然一切正常。但内联不是完全可选的吗?在代码中:第一://Class.hclassMyClass{voidinlinefoo(){}};下一个改为(不会链接)://Class.hclassMyClass{voidinlinefoo();};//Class.cppvoidMyClass::foo(){}然后到(会正常工作)://Class.hclassMyClass{voidfoo();};//Class.

c++ - 内联虚函数

在C++中,我的理解是虚函数可以内联,但一般来说,内联的提示会被忽略。看来内联虚函数没有太大意义。对吗?谁能给出一个内联虚函数好的例子? 最佳答案 为了完整地回答这个问题,我们需要了解virtual的属性独立地应用于函数本身以及对该函数的调用。有虚函数和非虚函数。这些函数有虚拟和非虚拟调用。inline的属性也是如此。有内联函数和非内联函数。并且有对这些函数的内联和非内联调用。这些属性-virtual和inline-当应用于函数本身时,不会发生冲突。他们根本没有理由也没有机会发生冲突。inline说明符对函数本身的唯一更改是它修改了

c++ - 内联虚函数

在C++中,我的理解是虚函数可以内联,但一般来说,内联的提示会被忽略。看来内联虚函数没有太大意义。对吗?谁能给出一个内联虚函数好的例子? 最佳答案 为了完整地回答这个问题,我们需要了解virtual的属性独立地应用于函数本身以及对该函数的调用。有虚函数和非虚函数。这些函数有虚拟和非虚拟调用。inline的属性也是如此。有内联函数和非内联函数。并且有对这些函数的内联和非内联调用。这些属性-virtual和inline-当应用于函数本身时,不会发生冲突。他们根本没有理由也没有机会发生冲突。inline说明符对函数本身的唯一更改是它修改了

c++ - 默认情况下,静态变量是否在 C++17 的模板中内联?

在C++17的模板中是否默认内联静态变量?这是一个例子:templatestructSomeClass{staticTtest;};structSomeClass2{staticconstexprinttest=9;};这些变量是内联的还是仍然需要一个外线定义才能使用ODR? 最佳答案 staticconstexpr也将隐含地为inline,否则您需要将其标记为inlinetemplatestructSomeClass{inlinestaticTtest;//Nowinline};structSomeClass2{staticcon

c++ - 默认情况下,静态变量是否在 C++17 的模板中内联?

在C++17的模板中是否默认内联静态变量?这是一个例子:templatestructSomeClass{staticTtest;};structSomeClass2{staticconstexprinttest=9;};这些变量是内联的还是仍然需要一个外线定义才能使用ODR? 最佳答案 staticconstexpr也将隐含地为inline,否则您需要将其标记为inlinetemplatestructSomeClass{inlinestaticTtest;//Nowinline};structSomeClass2{staticcon

c++ - 内联模板函数?

如果inline模板函数包含在多个cpp文件中,我是否需要它们?谢谢。templateinlineQStringGetText();templateinlineQStringGetText(){return"true";}templateinlineQStringGetText(){return"false";} 最佳答案 你这样做,因为它们是完整的函数特化,因此像普通函数一样受单一定义规则的约束。 关于c++-内联模板函数?,我们在StackOverflow上找到一个类似的问题:

c++ - 内联模板函数?

如果inline模板函数包含在多个cpp文件中,我是否需要它们?谢谢。templateinlineQStringGetText();templateinlineQStringGetText(){return"true";}templateinlineQStringGetText(){return"false";} 最佳答案 你这样做,因为它们是完整的函数特化,因此像普通函数一样受单一定义规则的约束。 关于c++-内联模板函数?,我们在StackOverflow上找到一个类似的问题:

c++ - 我可以选择性地(强制)内联函数吗?

在书中CleanCode(以及我遇到并阅读过的其他几个)建议保持函数很小,如果它们变大则将它们分解。它还建议函数应该只做一件事且只做一件事。在OptimizingsoftwareinC++AgnerFog表示他不喜欢仅仅因为函数越过一定数量的行的阈值就将其分解的规则。他指出,这会导致不必要的跳转,从而降低性能。首先,我明白,如果我正在处理的代码不是处于紧密循环中并且函数很繁重,因此调用它们所花费的时间与代码中的时间相比相形见绌。函数需要执行。但是让我们假设我正在使用大多数时候被其他对象/函数使用并且正在执行相对微不足道的任务的函数。这些功能遵循第一段中列出的建议(即执行一个单一功能并且