在类内部,为什么`auto b()-> decltype(a()){}`有效,但是`decltype(a())b(){}`不起作用?

黑猫

考虑以下代码:(Ideone)

struct S
{
    int a() {return 0;}
    decltype(a()) b() {return 1;}
};

它给了我以下错误:

错误:无法在没有对象的情况下调用成员函数'int S :: a()'


另一方面,此代码可以正常编译:(Ideone)

struct S
{
    int a() {return 0;}
    auto b() -> decltype(a()) {return 1;}
};


为什么一个示例有效,而另一个示例却无法编译?

两个示例中的编译器行为是否完全正确?

如果编译器是正确的,那么为什么标准要求这种奇怪的行为?

Brian Bi

由于a是一个非静态成员函数,因此a()被解释为(*this).a()部分引用[expr.prim.general] / 3,

如果声明声明了某个类的成员函数或成员函数模板X,则表达式this为类型“指向cv-qualifier-seq的 指针”的prvalue,X位于可选cv-qualifer-seqfunction-definition的结尾之间member-声明符声明符它不应出现在可选的cv-qualifier-seq之前,也不应出现在静态成员函数的声明内(尽管其类型和值类别是在静态成员函数内定义的,因为它们在非静态成员函数内) 。

尾随收益型配备可选的后CV-预选赛-SEQ(在你的例子省略,因为S::b不是CV-合格),这样this就可能会出现,但不能出庭。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

decltype()对于正在编译的类模板不起作用

来自分类Dev

为什么将decltype(a,b)评估为参考?

来自分类Dev

为什么将decltype(a,b)评估为参考?

来自分类Dev

为什么decltype(class :: class :: class :: member)有效

来自分类Dev

为什么“ x = a或b”在Perl中不起作用?

来自分类Dev

为什么退格键'\ b'在C ++中不起作用?

来自分类Dev

为什么\ b在python re模块中不起作用?

来自分类Dev

为什么转义符\ b在前几行不起作用?

来自分类Dev

为什么退格键'\ b'在C ++中不起作用?

来自分类Dev

您好,为什么我的按钮B不起作用?

来自分类Dev

为什么我的条件(-not A -and (A -or B -or C))不起作用?

来自分类Dev

使用父级成员的decltype在MSVC上的lambda内部不起作用

来自分类Dev

SSH:A到B有效,B到A不起作用

来自分类Dev

导入有效,但是为什么要求不起作用?

来自分类Dev

为什么decltype在这里起作用但不能自动起作用?

来自分类Dev

onItemClick有效,但onItemLongClick不起作用,为什么?

来自分类Dev

为什么joyGetPos有效,而joyGetPosEx不起作用?

来自分类Dev

为什么char []有效,但char *不起作用

来自分类Dev

为什么“ \ b”在find的正则表达式模式中不起作用?

来自分类Dev

为什么[“ A”,“ B”,“ C”]。map(String.prototype.toLowerCase.call)不起作用?

来自分类Dev

verilog 16b桶式循环移位为什么不起作用?

来自分类Dev

为什么'sort {$ a- $ b}(浮点数列表)'在Perl中不起作用?

来自分类Dev

为什么[“ A”,“ B”,“ C”]。map(String.prototype.toLowerCase.call)不起作用?

来自分类Dev

为什么C中的if语句中的(a == b == c)不起作用?

来自分类Dev

为什么函数 lsqcurvefit 在 Matlab 2015b 中似乎不起作用?

来自分类Dev

tmux Ctrl + B不起作用

来自分类Dev

“ ls -b”在macOS上不起作用

来自分类Dev

SysRQ + B(引导)不起作用,但是O(关闭)

来自分类Dev

Vue.js <MyButton @ click =“ click(event)”> Click </ MyButton>不起作用,但是$ event有效,为什么?

Related 相关文章

  1. 1

    decltype()对于正在编译的类模板不起作用

  2. 2

    为什么将decltype(a,b)评估为参考?

  3. 3

    为什么将decltype(a,b)评估为参考?

  4. 4

    为什么decltype(class :: class :: class :: member)有效

  5. 5

    为什么“ x = a或b”在Perl中不起作用?

  6. 6

    为什么退格键'\ b'在C ++中不起作用?

  7. 7

    为什么\ b在python re模块中不起作用?

  8. 8

    为什么转义符\ b在前几行不起作用?

  9. 9

    为什么退格键'\ b'在C ++中不起作用?

  10. 10

    您好,为什么我的按钮B不起作用?

  11. 11

    为什么我的条件(-not A -and (A -or B -or C))不起作用?

  12. 12

    使用父级成员的decltype在MSVC上的lambda内部不起作用

  13. 13

    SSH:A到B有效,B到A不起作用

  14. 14

    导入有效,但是为什么要求不起作用?

  15. 15

    为什么decltype在这里起作用但不能自动起作用?

  16. 16

    onItemClick有效,但onItemLongClick不起作用,为什么?

  17. 17

    为什么joyGetPos有效,而joyGetPosEx不起作用?

  18. 18

    为什么char []有效,但char *不起作用

  19. 19

    为什么“ \ b”在find的正则表达式模式中不起作用?

  20. 20

    为什么[“ A”,“ B”,“ C”]。map(String.prototype.toLowerCase.call)不起作用?

  21. 21

    verilog 16b桶式循环移位为什么不起作用?

  22. 22

    为什么'sort {$ a- $ b}(浮点数列表)'在Perl中不起作用?

  23. 23

    为什么[“ A”,“ B”,“ C”]。map(String.prototype.toLowerCase.call)不起作用?

  24. 24

    为什么C中的if语句中的(a == b == c)不起作用?

  25. 25

    为什么函数 lsqcurvefit 在 Matlab 2015b 中似乎不起作用?

  26. 26

    tmux Ctrl + B不起作用

  27. 27

    “ ls -b”在macOS上不起作用

  28. 28

    SysRQ + B(引导)不起作用,但是O(关闭)

  29. 29

    Vue.js <MyButton @ click =“ click(event)”> Click </ MyButton>不起作用,但是$ event有效,为什么?

热门标签

归档