为什么仅声明朋友功能不能具有默认参数?

Codie CodeMonkey

我了解到,除非朋友声明是一个定义,否则C ++ 11标准不允许朋友函数具有默认参数。因此,这是不允许的:

class bar
{
    friend int foo(int seed = 0);
};

inline int foo(int seed) { return seed; }

但这是:

class bar
{
    friend int foo(int seed = 0)
    {
        return seed;
    }
};

(示例由http://clang-developers.42468.n3.nabble.com/Clang-compile-error-td4033809.html提供

这个决定背后的合理性是什么?带有默认参数的Friend函数很有用,例如,如果函数太复杂而无法在适当位置声明,为什么现在不允许使用它们呢?

亚当·彼得森(Adam H.Peterson)

在查看DR 136时,似乎有一个问题,当朋友声明与带有默认参数的名称空间级别声明结合使用时,尤其是在模板的上下文中,这会使语义难以推理(并且可能难以针对其发出质量诊断信息) 。该页面上建议的DR解决方案是,仅当声明是程序中的唯一参数时,才允许使用默认参数。由于函数定义也是一个声明,因此这意味着在Friendly声明中指定默认参数的唯一有用方法是使其成为一个定义。我猜想C ++ 11标准只是选择使此实际使用要求明确。

(从技术上讲,如果用“程序”来表示“翻译单元”,则可以构建一个完整的程序,其中功能是在完全不同的翻译单元中定义的,但是由于该功能的定义将看不到类定义,因此,友情赠款在很大程度上将毫无用处。)

解决此问题的方法似乎非常简单。声明朋友而不使用默认参数,然后使用所需的默认参数在名称空间范围内再次声明它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么仅声明朋友功能不能具有默认参数?

来自分类Dev

为什么我的类朋友功能不能使用名称空间访问受保护的成员?

来自分类Dev

为什么RHR功能不能超载?

来自分类Dev

为什么该记忆功能不能线性运行?

来自分类Dev

为什么列表删除功能不能删除空格?

来自分类Dev

为什么这个功能不能正常工作?

来自分类Dev

为什么我的 Javascript 功能不能正常工作?

来自分类Dev

为什么此功能不能打印所有值?

来自分类Dev

为什么默认参数和功能参数不能具有相同的名称?

来自分类Dev

为什么此Perl随机播放功能不能随机播放?

来自分类Dev

为什么某些Emacs功能不能通过`Mx`使用?

来自分类Dev

为什么此功能不能正确打开和关闭LED?

来自分类Dev

为什么这个jQuery remove功能不能正常工作?

来自分类Dev

为什么我的“获取”功能不能真正获取字符串?

来自分类Dev

为什么Knockout的点击编辑功能不能在表格中使用多个值?

来自分类Dev

为什么循环功能不能与空列表一起使用?

来自分类Dev

为什么同步睡眠功能不能通过内部承诺使异步?

来自分类Dev

为什么我的堆排序功能不能按预期工作?

来自分类Dev

为什么多层异步功能不能捕获节点最低级别抛出的错误?

来自分类Dev

为什么我的功能不能正常工作两次?

来自分类Dev

为什么我的删除功能不能将节点从BST中删除?

来自分类Dev

为什么循环功能不能与空列表一起使用?

来自分类Dev

为什么此功能不能正确打开和关闭LED?

来自分类Dev

为什么该功能不能在油脂猴子上使用

来自分类Dev

为什么Linux中的“系统”功能不能运行此shellscript?

来自分类Dev

为什么计数功能不能在Spark中使用mapvalues?

来自分类Dev

为什么信号功能不能使用信号工作?

来自分类Dev

具有默认模板参数的朋友功能模板

来自分类Dev

为什么此功能不能在即7,8(延迟和淡入)上起作用?

Related 相关文章

  1. 1

    为什么仅声明朋友功能不能具有默认参数?

  2. 2

    为什么我的类朋友功能不能使用名称空间访问受保护的成员?

  3. 3

    为什么RHR功能不能超载?

  4. 4

    为什么该记忆功能不能线性运行?

  5. 5

    为什么列表删除功能不能删除空格?

  6. 6

    为什么这个功能不能正常工作?

  7. 7

    为什么我的 Javascript 功能不能正常工作?

  8. 8

    为什么此功能不能打印所有值?

  9. 9

    为什么默认参数和功能参数不能具有相同的名称?

  10. 10

    为什么此Perl随机播放功能不能随机播放?

  11. 11

    为什么某些Emacs功能不能通过`Mx`使用?

  12. 12

    为什么此功能不能正确打开和关闭LED?

  13. 13

    为什么这个jQuery remove功能不能正常工作?

  14. 14

    为什么我的“获取”功能不能真正获取字符串?

  15. 15

    为什么Knockout的点击编辑功能不能在表格中使用多个值?

  16. 16

    为什么循环功能不能与空列表一起使用?

  17. 17

    为什么同步睡眠功能不能通过内部承诺使异步?

  18. 18

    为什么我的堆排序功能不能按预期工作?

  19. 19

    为什么多层异步功能不能捕获节点最低级别抛出的错误?

  20. 20

    为什么我的功能不能正常工作两次?

  21. 21

    为什么我的删除功能不能将节点从BST中删除?

  22. 22

    为什么循环功能不能与空列表一起使用?

  23. 23

    为什么此功能不能正确打开和关闭LED?

  24. 24

    为什么该功能不能在油脂猴子上使用

  25. 25

    为什么Linux中的“系统”功能不能运行此shellscript?

  26. 26

    为什么计数功能不能在Spark中使用mapvalues?

  27. 27

    为什么信号功能不能使用信号工作?

  28. 28

    具有默认模板参数的朋友功能模板

  29. 29

    为什么此功能不能在即7,8(延迟和淡入)上起作用?

热门标签

归档