2

これはC++での未定義の動作ですか?

#include <iostream>

const double& abs(const double& x){
    return x>0 ? x:-x;
}

int main () {

    double x = -10.0;
    double y = abs(x);

    std::cout << y << std::endl;

    return 0;
}   

g++それが好きではありません:

mem.cpp: In function ‘const double& abs(const double&)’:
mem.cpp:4: warning: returning reference to temporary

valgrindはあらゆる種類のエラーを生成します。

4

1 に答える 1

1

はい。三項演算子の結果は一時的なものであり、関数から戻ると存在しなくなります。

于 2012-08-30T19:09:45.410 に答える