g++ - Why after compile c++ code with -O3 flag function generate wrong output? -
when in main function write
function fun; fun.addname("string1"); std::cout << fun.getnumberofindeks();
i see on screen 2 different numbers:
- 1 (error) when g++ have -o3 flag
- 0 when g++ have -o0 flag
below definition of class , methods:
class ifunction { public: virtual void addname(std::string nazwa_funkcji) = 0; virtual std::size_t getnumberofindeks() = 0; }; class function: public ifunction { public: function(); void addname(std::string nazwa_funkcji); std::size_t getnumberofindeks(); private: std::vector<std::unique_ptr<std::string>> vp_nazwy_indeksow_; std::unique_ptr<::std::string> p_nazwa_; } function::function():p_nazwa_(new std::string("")) { } std::size_t function::getnumberofindeks() { vp_nazwy_indeksow_.size(); } void function::addname(std::string nazwa_funkcji) { std::unique_ptr<::std::string> pl_nazwa_funkcji (new std::string(nazwa_funkcji)); p_nazwa_ = std::move(pl_nazwa_funkcji); }
when comment second line
function fun; //fun.addname("string1"); std::cout << egzfunkcji3.getnumberofindeks();
i see on screen expected zero g++ flag -o3. where problem ?
here's function:
std::size_t function::getnumberofindeks() { vp_nazwy_indeksow_.size(); }
i count 0 return statements result in undefined behavior.
if compiler didn't warn or error this, compiler trash , should replaced better one.
Comments
Post a Comment