问题描述
我不确定在各种情况下右值和左值的确切机制。 举个例子吧。
#include <iostream>
void f() { std::cout << "Hello\n"; }
template<typename T>
void g0(T&& a) {
a();
}
template<typename T>
void g1(T& a) {
a();
}
template<typename T>
void g2(T a) {
a();
}
int main() {
printf("%p,%p\n",f,&f); // f and &f are same
g0(f); // (1)
g0(&f); // (2)
g1(f); // (3)
// g1(&f); // (4) compile error !!
g2(f); // (5)
g2(&f); // (6)
}
我的问题
- f(=> &f) 之前的函数名 f 和 & 都只是函数指针。我说得对吗?
- 当我将函数名或带有函数名的 & 传递给各种函数的参数时会发生什么?
- (4) 有编译错误。 f 和 &f 在我的理解下是一样的,但为什么会发生? 我知道如果我使用诸如“void g1(const T& a)”之类的 const 可以编译它,但我不确定为什么。
错误信息是:
candidate function [with T = void (*)()] not viable: no kNown conversion from 'void (*)()' to 'void (*&)()' for 1st argument
void g1(T& a)...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)