C++ Visual Studio 2010 C4717 编译器警告在代码的一部分中,但在另一部分中没有

标签 c++ visual-studio-2010 visual-c++ warnings

这六种方法(实际上是三种,实际抛出警告的是非 const 版本)导致 C4717(函数在所有路径上递归)警告,但后面的方法却没有(与我能做的完全一样)告诉...)。 我错过了什么导致对这些而不是另一个发出警告?

产生警告的方法:

template<class T>
const QuadTreeNode<T>* QuadTree<T>::GetRoot() const {
    return _root;
}


template<class T>
QuadTreeNode<T>* QuadTree<T>::GetRoot() {
    return static_cast<const QuadTree<T> >(*this).GetRoot();
}

template<class T>
const int QuadTree<T>::GetNumLevels() const {
    return _levels;
}

template<class T>
int QuadTree<T>::GetNumLevels() {
    return static_cast<const QuadTree<T> >(*this).GetNumLevels();
}

template<class T>
const bool QuadTree<T>::IsEmpty() const {
    return _root == NULL;
}


template<class T>
bool QuadTree<T>::IsEmpty() {
    return static_cast<const QuadTree<T> >(*this).IsEmpty();
}

非警告生成方法:

template<class T>
const Rectangle QuadTreeNode<T>::GetNodeDimensions() const {
    return _node_bounds;
}

template<class T>
Rectangle QuadTreeNode<T>::GetNodeDimensions() {
    return static_cast<const QuadTreeNode<T> >(*this).GetNodeDimensions();
}

最佳答案

ildjarn 所述, 是一个 acknowledged带有警告的错误。如果您查看与您的代码类似的最基本用法的代码,则没有以下警告(并且不是递归的)。

class A
{
public:
    bool IsEmpty()
    {
        return static_cast<const A>(*this).IsEmpty();
    }

    bool IsEmpty() const
    {
        return true;
    }
};

int main()
{
    A whatever;
    whatever.IsEmpty();

    return 0;
}

关于C++ Visual Studio 2010 C4717 编译器警告在代码的一部分中,但在另一部分中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097510/

相关文章:

C++ Qt 从 QNetworkRequest 获取 HTTP header

c++ - 如何在 C++ 中清理已删除的对象

visual-studio-2010 - 如何抑制自动生成文件的 stylecop/fxcop/Visual Studio 代码分析?

c++ - Qt ui 文件不编译成 C++ 头文件

c++ - 如何使用 "const unordered_map"?

c++ - CString 运算符 "+="和 "+"之间的不同行为

c++ - 带三角条的圆圈

c++ - 如何使用nlohmann lib解析json?

visual-studio - “favorite” 文件夹和文件是否有任何 Visual Studio 扩展?

c++ - 使用 VLD 编译 C 代码