为什么访问此STL成员需要明确的“this”?

时间:2016-05-05 11:07:00

标签: c++ c++-standard-library

我决定编写一个不起作用的愚蠢代码:

template <class T, class Container>
class reversible_stack : protected std::stack<T, Container>
{
public:
    void reverse()
    {
        std::reverse(std::begin(c), std::end(c));
    }
};
需要

this->c而不是c

然而,此处不需要this

namespace a
{
    class base
    {
        protected:
            int i;
    };
};

class derived : protected a::base
{
public:
    void foo() { i; }
};

__attribute__ ((__visibility__ ("default")))没有任何区别。

您可以在此处查看libstdc++代码。需要this的区别是什么?

编辑:这不是重复。请参阅以下代码:

namespace standard
{
    template <typename T>
    class container
    {
        protected:
            int i;
    };

    template <typename T, typename Container = container<T>>
    class base
    {
        protected:
            Container c;
    };
}

class derived : protected standard::base<int>
{
public:
    void foo() { c; }
};

请注意base不需要从container继承,就像stack不需要从deque(容器)继承一样。然而这compiles

有人会说&#34;它是一个实现细节&#34;,但变量名c由标准[23.2.3.1]指定。

0 个答案:

没有答案