3

これらの6つのメソッド(実際には3つ、実際に警告をスローするのは非定数バージョンです)は、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();
}
4

1 に答える 1

1

ildjarnが述べたように、これは警告付きの認識されたバグです。コードと同様の最も基本的な使用法でコードを見ると、次のような警告はありません(再帰的ではありません)。

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;
}
于 2012-04-11T03:34:21.650 に答える