为什么变量是函数而不是对象?
C++ Why is variable a function and not an object?
这个标题可能不完全准确——它是基于我对正在发生的事情的最好猜测,我认为它比"有人能解释一下这段代码发生了什么吗?"
无论如何,我有这样的代码:
class Class1 { };
class Class2
{
public:
Class2(Class1 other){}
};
void func(Class2 x){}
int main()
{
Class2 x(Class1());
func(x); //Compile Error
Class1 y1;
Class2 y2(y1);
func(y2); //Compiles fine
return 0;
}
所以当我编译它时,标记为"编译错误"的行在g++ 4.9中提供了一个错误:
main.cpp: In function ‘int main()’:
main.cpp:14:10: error: could not convert ‘x’ from ‘Class2 (*)(Class1 (*)())’ to ‘Class2’
func(x);
^
clang++ 3.4.1提供了类似的错误。
我最好的猜测是它认为"x"是某种返回Class2的函数,而不是Class2本身,但是…为什么会发生这种情况?我认为对Class1的调用返回一些匿名Class1,它被传递给Class2的构造函数。
Class2 x(Class1());
是一个函数声明,由于令人烦恼的解析(谷歌技能在这里会派上用场)。
Class2 x((Class1()));
Class2 x{Class1()};
这是因为这一行
Class2 x( Class1());
实际上声明了一个函数而不是一个对象。这就是所谓的解析。为了避免这个问题,你应该这样写:
Class2 x((Class1()));
或
Class1 y;
Class2 x( y);
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数