当前位置:  开发笔记 > 编程语言 > 正文

在c ++中有&func或class :: func的用途吗?

如何解决《在c++中有&func或class::func的用途吗?》经验,为你挑选了1个好方法。

这似乎不一致.为什么我们使用&Example :: func而不是Example :: func?是否有用于Example :: func或&exampleFunction?看起来我们不能对函数进行引用,因此排除了Example :: func.我想不出一种使用&exampleFunction的方法,因为exampleFunction已经返回一个指针.

#include 
class Example {
public:
    void func() { std::cout <<"print me\n"; }
};
void exampleFunction() { std::cout << "print me too\n"; }
typedef void (Example::*ExampleFunc_t)(); 
typedef void (*ExampleFunction_t)();
int main()
{
    Example e;
    ExampleFunc_t     f  = &Example::func;
    ExampleFunction_t f2 = exampleFunction;
    (e.*f)();
    f2();
    return 0;
} 

Pieter.. 6

因为这是标准定义函数指针的方式.

实际上,您总是必须使用地址运算符&来获取指向函数的指针,但对于常规函数和静态成员函数,标准中定义了从函数到指针到函数的隐式转换.

这不是为(非静态)成员函数定义的,因为您无法获得非静态成员函数的左值.

从C++标准:

4.3函数到指针的转换

    函数类型T的左值可以转换为"指向T的指针"的右值.结果是指向函数的指针.

脚注52:

此转换从不适用于非静态成员函数,因为无法获取引用非静态成员函数的左值.

我认为,出于一致性的原因,他们宁愿只允许和运作,但隐式转换只是C遗产的一件神器......



1> Pieter..:

因为这是标准定义函数指针的方式.

实际上,您总是必须使用地址运算符&来获取指向函数的指针,但对于常规函数和静态成员函数,标准中定义了从函数到指针到函数的隐式转换.

这不是为(非静态)成员函数定义的,因为您无法获得非静态成员函数的左值.

从C++标准:

4.3函数到指针的转换

    函数类型T的左值可以转换为"指向T的指针"的右值.结果是指向函数的指针.

脚注52:

此转换从不适用于非静态成员函数,因为无法获取引用非静态成员函数的左值.

我认为,出于一致性的原因,他们宁愿只允许和运作,但隐式转换只是C遗产的一件神器......

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有