语句:“内联函数必须在调用它们之前定义。”
这个说法正确吗?
编辑
问题最初是用德语提出的:
内联-Funktionen müssen vor ihrem Aufruf sein。
也许对任何人都有帮助..。
发布于 2012-03-24 16:26:36
是的,它是正确的,但只有partly.It才能正确地重新定义如下:
“内联函数必须在调用它们的每个https://stackoverflow.com/questions/1106149/what-is-a-translation-unit-in-c(但不一定在之前)中定义。”
C11++标准:§7.1.2.4
内联函数应在其使用的每个翻译单元中定义,并在每个case.Note中具有完全相同的定义:在转换单元中出现内联函数之前,可能会遇到对内联函数的调用。-end注记
,为什么是这样的理由?
当您以内联方式声明函数时,基本上是告诉编译器(如果可能的话)将函数调用的代码替换为函数的内容(只要函数被调用)。其思想是,函数体可能很小,调用函数比函数本身的调用开销更大。
要做到这一点,编译器需要在编译代码时看到定义,在代码中调用函数。通常,这是通过使用inline说明符在标头中添加函数的定义来完成的,然后在要调用函数的每个cpp文件中包含头文件。
发布于 2012-03-24 16:52:31
不是的。C++11草案n3242比7.1.2小节中的早期规范更清楚;
在每一个使用odr的翻译单元中,内联函数必须是defined,并且在每种情况下都应该具有完全相同的defined (3.2)。注释:在转换单元中出现内联函数definition之前,可能会遇到对其的调用。-尾注
发布于 2012-03-24 16:27:34
这个语句没有任何意义:不再调用内联的函数,代码就在当前函数中(它已被“内联”)。所以不,我会说是不对的。
https://stackoverflow.com/questions/9853318
复制相似问题