【发布时间】:2013-02-14 12:46:32
【问题描述】:
以下代码是使用 VC++ Nov 2012 CTP 编译的。但是编译器给出了警告。
我只是想知道这是否是 VC++ Nov 2012 CTP 的错误。
struct A
{
int n;
A(int n)
: n(n)
{}
int Get() const
{
return n;
}
int Get()
{
//
// If using "static_cast<const A&>(*this).Get();" instead, then OK.
//
return static_cast<const decltype(*this)&>(*this).Get(); // Warning!
}
};
int main()
{
A a(8);
//
// warning C4717: 'A::Get' : recursive on all control paths,
// function will cause runtime stack overflow
//
a.Get();
}
【问题讨论】:
-
除非你真的做的不仅仅是在常量
Get中返回一个值,否则你可以在非常量Get函数中做同样的事情。我实际上没有看到非常量Get的原因。 -
示例代码仅用于概念验证。 Get() 的真正作用在这里毫无意义。
-
a不是已经是 const 了吗?为什么它甚至会警告非 constGet函数? -
@Shahbaz,这是我的错,已经修复。
标签: c++ c++11 compiler-errors overloading decltype