gcc优化会导致意外的返回值

时间:2015-10-09 01:15:51

标签: c++ gcc optimization

class C
{
   virtual const char* foo() const {return C::bar();};
   static const char* bar() {return "sdfsdf";};
};

只要两个函数都返回指针,它们就应该返回相同的指针 - 即使bar被内联,因为foo应该返回bar的结果。

但是在版本foo中是“优化的”,因此创建了“sdfsdf”的副本,并且函数现在返回不同的地址。如何获得要返回的预期值?

1 个答案:

答案 0 :(得分:-1)

"我不希望文字具有相同的地址,我希望foo返回bar的结果"

没有在程序中定义bar的结果为const,因此您甚至无法保证对C::bar()的两次调用将返回相同的指针地址。如果C ++认定它是一种优化,则可以自由地执行此操作。

因此调用C::bar()并调用C::bar() via C::foo()可以返回不同的指针。将C::bar定义为const函数可能会解决此问题(也可能不会)。