讓說,我有一個內聯函數像this:編譯器如何管理返回內聯函數?
inline double CalculateValue() {
// some condition
if (true) {
// some other condition
if (true) {
// another condition
if (true) {
return 1.0;
}
// somethings
std::cout << "inside1" << std::endl;
}
// somethings
std::cout << "inside2" << std::endl;
}
return 2.0;
}
void Process() {
double value = CalculateValue();
value *= 100.0;
std::cout << value << std::endl;
}
int main()
{
Process();
}
,將「複製和粘貼」的CalculateValue()
函數內的Process()
之一。正如預期的那樣,結果是100
。
但是,如果我嘗試emulate如何「複製和粘貼」將執行,有件事情我不明白:
void Process() {
double value;
// some condition
if (true) {
// some other condition
if (true) {
// another condition
if (true) {
value = 1.0;
return;
}
// somethings
std::cout << "inside1" << std::endl;
}
// somethings
std::cout << "inside2" << std::endl;
}
value = 2.0;
value *= 100.0;
std::cout << value << std::endl;
}
int main()
{
Process();
}
當然,當它到達return
聲明,該函數的其餘部分必須被忽略(即inside1
和inside2
絕不能被打印),因爲return
。但是,如果我從0123.父功能(Process()
),它立即返回,所以我永遠不會看到100
。
這意味着它以另一種方式。
編譯器如何管理這種情況?我試圖創建一個代碼塊,但仍然return
返回到主函數...
編譯器顯然不使用return,我不知道確切使用了哪一個,但有很多其他選項,例如' while(1){... break; }'甚至'goto'或者一些比較模糊的步驟會導致asm – slawekwin
'inline'不會改變函數調用的語義,只會導致鏈接。 – sp2danny