簡體   English   中英

為什么我的程序在O0和O2的優化級別上返回不同的結果

[英]Why my program return different results at optimization level of O0 and O2

這是我的代碼:

#include<iostream>

const int & Min(const int& a, const int& b);


int main() {
    using namespace std;

    auto&& val = Min(1,2);

    cout << val << endl;
    return 0;
}


const int & Min(const int& a, const int& b) {
    return a < b ? a : b;
}

如果我使用O0選項g++ -O0 main.cpp -o main編譯,則結果為1 如果使用O2選項g++ -O2 main.cpp -o main編譯,則結果為0。

為什么這會給出不同的結果?

您的代碼具有未定義的行為

對於Min(1,2); ,構造了兩個從12初始化的臨時對象,然后將它們綁定到參考參數ab 請注意,臨時對象會立即(在完整表達式之后)銷毀。 Min()通過引用返回ab 這意味着返回的引用總是懸空的,對其取消引用會導致UB,即一切皆有可能。

編輯

文字(如12 )不能直接引用,而是需要臨時的

when a prvalue is materialized so that it can be used as a glvalue, which occurs (since C++17)會創建臨時對象, when a prvalue is materialized so that it can be used as a glvalue, which occurs (since C++17)在以下情況下when a prvalue is materialized so that it can be used as a glvalue, which occurs (since C++17)

  • 將引用綁定到prvalue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM