此問題已更新。請查看代碼。編譯器警告「有效C++」的方法,以避免重複const和非const成員函數
以下代碼是使用VC++ 2012年11月CTP編譯的。 Scott Meyers的書「Effective C++」建議我們應該使用避免重載const和非const成員函數的方法。但是,下面的代碼會導致警告(級別1)。由於WDK構建工具將警告視爲錯誤,因此以下代碼無法成功編譯。
還有其他更好的方法嗎?
struct A
{
int n;
A(int n)
: n(n)
{}
int Get() const
{
return n;
}
int Get()
{
return static_cast<const decltype(*this)&>(*this).Get();
}
};
int main()
{
const A a(8);
//
// warning C4717: 'A::Get' : recursive on all control paths,
// function will cause runtime stack overflow
//
a.Get();
}
不知道它以任何方式警告是相關的,但在概念上你的'const'版本應該是'const int的&獲取()const',即返回const的引用。 – juanchopanza 2013-02-28 09:38:36
@ juanchopanza,固定。 – xmllmx 2013-02-28 09:40:45
在這種特殊情況下,「重複」將是'return n;'。這是如何改進的?我們發現引入額外的代碼有時也會導致額外的錯誤... – 2013-02-28 10:00:43