【发布时间】:2015-05-31 18:18:21
【问题描述】:
在此示例代码中,func1 是 void (*)(int, double) 的类型,funky 是 void(&)(int, double) 的类型。
#include <iostream>
using namespace std;
void someFunc(int i, double j) {
cout << i << ":" << j << endl;
}
int main(int argc, char *argv[]) {
auto func1 = someFunc;
auto& func2 = someFunc;
cout << typeid(func1).name() << endl;
cout << typeid(func2).name() << endl;
func1(10, 20.0);
func2(10, 30.0);
}
输出显示差异:
PFvidE
FvidE
10:20
10:30
实际上,这两种类型有什么区别?
【问题讨论】:
-
内部表示是一样的,但是语言层面的含义却大不相同
-
语言的“语法糖”规则允许以相同的语法使用它们。但在语义上它们是不同的。例如,
auto& func2 = &someFunc;不会编译,而auto func1 = &someFunc;会。尽管在这种情况下使用auto只会混淆差异。