怪异的输出:为什么这段代码会提供任何有意义的输出,更不用说这个了?

irf*_*nka 0 c++ templates cout operator-overloading generic-programming

我不确定如何陈述我的问题,但我们走了...

所以,我有这个类operator[]有一个空体(尚未实现).但是,当我从中调用它时main(),它会产生一个输出.更重要的是,输出正是前一行中分配给它的输出.

EDIT:我添加了一个名为的私有属性emptyValue,并将其初始化为TipVrijednosti()类构造函数.

这是一个例子:

  template<typename TipKljuca, typename TipVrijednosti>
    class BinStabloMapa : public Mapa<TipKljuca, TipVrijednosti>
    {
            .
            .
        TipVrijednosti &operator[] (const TipKljuca &kljuc) {
            return emptyValue;
        }
        const TipVrijednosti &operator[] (const TipKljuca &kljuc) const {
            return emptyValue;
        }
            .
            .
    }

    int main()
    {
        BinStabloMapa<int, int> m;
        m[100] = 200;
        cout << m[100] << endl;
        return 0;
    }

    OUTPUT: 200
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么会这样?

Jos*_*eld 8

您有未定义的行为,因为您没有从具有非void返回类型的函数返回任何内容.

§6.6.3:

流出函数末尾相当于没有值的返回; 这会导致值返回函数中的未定义行为.

§1.3.24:


本国际标准没有要求的未定义行为行为

  • @IrfanKahvedzic那么什么是`emptyValue`? (2认同)