【问题标题】:What is the difference of friend iterator and friend class iterator which encounter in thinking in c++?c++思维中遇到的友元迭代器和友元类迭代器有什么区别?
【发布时间】:2011-06-01 03:27:54
【问题描述】:

在 Thinking in C++ Volume 1,第 16 章:模板简介。 上下文:

请注意,不要只是说:

friend iterator; // Make it a friend 

这段代码有:

friend class iterator; // Make it a friend

这很重要,因为名称“迭代器”已经在范围内,来自一个包含的文件。

上面的 Eckel 到底是什么意思? 似乎friend iterator 编译正确,我看不出差异。谁能告诉答案?谢谢

【问题讨论】:

    标签: c++ friend friend-class


    【解决方案1】:

    按照 C++03 标准第 11.4 节:

    应在类的友元声明中使用详细类型说明符。

    因此根据规范,编译器会警告您iterator 的友元声明必须是详细的类名。如果不是,则编译器在此特定方面不符合标准。

    什么是详细类型说明符
    C++ 使用详细的类型说明符来明确告诉编译器将类视为类。我认为 MSDN 可以比我解释得更好,所以请查看this 以获取详细说明。

    【讨论】:

    • 也许可以解释一下elaborated type specifier 的含义,因为你知道,标准语言并不适合所有人。 :)
    • @Xeo:添加了一个到 MSDN 的链接,我希望就足够了。:)
    • 另外,在 C++0x 中,模板参数的这个限制被取消了,所以我们现在可以拥有template<class D> class Final{ friend D; ~Final(){} };
    猜你喜欢
    • 2014-12-05
    • 2010-10-27
    • 2010-11-04
    • 2012-02-10
    • 2020-04-14
    • 2018-01-28
    • 2019-10-25
    • 2012-06-14
    • 2011-07-17
    相关资源
    最近更新 更多