class C
{
virtual const char* foo() const {return C::bar();};
static const char* bar() {return "sdfsdf";};
};
只要两个函数都返回指针,它们就应该返回相同的指针 - 即使bar
被内联,因为foo
应该返回bar
的结果。
但是在版本foo
中是“优化的”,因此创建了“sdfsdf”的副本,并且函数现在返回不同的地址。如何获得要返回的预期值?
答案 0 :(得分:-1)
"我不希望文字具有相同的地址,我希望foo返回bar的结果"
没有在程序中定义bar的结果为const
,因此您甚至无法保证对C::bar()
的两次调用将返回相同的指针地址。如果C ++认定它是一种优化,则可以自由地执行此操作。
因此调用C::bar()
并调用C::bar() via C::foo()
可以返回不同的指针。将C::bar
定义为const函数可能会解决此问题(也可能不会)。