C ++为什么变量是函数而不是对象?

猎犬狗

该标题可能并不完全准确,它基于我对所发生情况的最佳猜测,我认为它比“有人可以解释此代码所发生的情况更好”吗?

无论如何,我有以下代码:

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;
}

因此,当我编译它时,标记为“ Compile Error”的行在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());是一个令人烦恼的解析函数声明(Google技能在这里派上用场)。

选择:

Class2 x((Class1()));
Class2 x{Class1()};

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++-为什么可以直接在Copy构造函数中访问传递的对象的私有变量?

来自分类Dev

为什么在C ++中变量不是左值?

来自分类Dev

为什么C ++中的rand()函数不是真正随机的

来自分类Dev

为什么C ++ std :: min_element库函数接受使用bool返回类型的函数对象而不是像C中的int的函子?

来自分类Javascript

为什么函数的自变量不是JavaScript中的数组对象?

来自分类Dev

为什么函数参数可以在C中包含地址或变量

来自分类Dev

为什么C ++构造函数不能添加新的成员变量?

来自分类Dev

为什么函数不是对象?

来自分类Dev

[Objective-C ++]为什么允许在64位而不是32位中将对象分配给BOOL类型变量

来自分类Dev

为什么在 C++ 中的其他文件中使用全局变量时需要 extern 而不是函数的前向声明

来自分类Dev

在 C 中将指针变量作为函数参数而不是变量地址传递有什么问题?

来自分类Dev

在C ++中将派生类对象传递给具有基类参数的函数时,为什么要传递引用而不是值?

来自分类Dev

为什么在C ++中可以正常地调用成员函数(当不是静态成员函数时)?

来自分类Dev

为什么在 c++11 中调用了复制构造函数而不是移动构造函数?

来自分类Dev

在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

来自分类Dev

为什么用.Call而不是.C调用C ++函数时出现段错误?

来自分类Dev

为什么C / C ++中的函数体放在单独的源代码文件中而不是标头中?

来自分类Dev

为什么在函数 B 中调用函数 A 而不是在函数 C 中调用函数 B 会破坏 go 运行时

来自分类Dev

警告 C26495 从构造函数调用函数以初始化变量,为什么?

来自分类Dev

为什么这个变量不是对象?

来自分类Dev

为什么需要在c#中使用所有属性而不是公共实例变量?

来自分类Dev

为什么我需要在 C 中指定引用和指针而不是普通变量

来自分类Dev

为什么C ++ Lambda函数作为比较函数比等效对象快得多

来自分类Dev

为什么我在函数中创建的对象没有被其他函数修改?(C ++)

来自分类Dev

为什么某些C#方法使用对象来传递参数,而不是直接直接传递参数?

来自分类Dev

为什么可以在循环中而不是按顺序声明重复的Objective-C对象?

来自分类Dev

为什么静态数据成员不是c ++中对象的一部分?

来自分类Dev

C#:为什么我的字符串返回对象类型而不是它包含的值?

来自分类Javascript

为什么此对象“ forEach不是函数”?

Related 相关文章

  1. 1

    C ++-为什么可以直接在Copy构造函数中访问传递的对象的私有变量?

  2. 2

    为什么在C ++中变量不是左值?

  3. 3

    为什么C ++中的rand()函数不是真正随机的

  4. 4

    为什么C ++ std :: min_element库函数接受使用bool返回类型的函数对象而不是像C中的int的函子?

  5. 5

    为什么函数的自变量不是JavaScript中的数组对象?

  6. 6

    为什么函数参数可以在C中包含地址或变量

  7. 7

    为什么C ++构造函数不能添加新的成员变量?

  8. 8

    为什么函数不是对象?

  9. 9

    [Objective-C ++]为什么允许在64位而不是32位中将对象分配给BOOL类型变量

  10. 10

    为什么在 C++ 中的其他文件中使用全局变量时需要 extern 而不是函数的前向声明

  11. 11

    在 C 中将指针变量作为函数参数而不是变量地址传递有什么问题?

  12. 12

    在C ++中将派生类对象传递给具有基类参数的函数时,为什么要传递引用而不是值?

  13. 13

    为什么在C ++中可以正常地调用成员函数(当不是静态成员函数时)?

  14. 14

    为什么在 c++11 中调用了复制构造函数而不是移动构造函数?

  15. 15

    在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

  16. 16

    为什么用.Call而不是.C调用C ++函数时出现段错误?

  17. 17

    为什么C / C ++中的函数体放在单独的源代码文件中而不是标头中?

  18. 18

    为什么在函数 B 中调用函数 A 而不是在函数 C 中调用函数 B 会破坏 go 运行时

  19. 19

    警告 C26495 从构造函数调用函数以初始化变量,为什么?

  20. 20

    为什么这个变量不是对象?

  21. 21

    为什么需要在c#中使用所有属性而不是公共实例变量?

  22. 22

    为什么我需要在 C 中指定引用和指针而不是普通变量

  23. 23

    为什么C ++ Lambda函数作为比较函数比等效对象快得多

  24. 24

    为什么我在函数中创建的对象没有被其他函数修改?(C ++)

  25. 25

    为什么某些C#方法使用对象来传递参数,而不是直接直接传递参数?

  26. 26

    为什么可以在循环中而不是按顺序声明重复的Objective-C对象?

  27. 27

    为什么静态数据成员不是c ++中对象的一部分?

  28. 28

    C#:为什么我的字符串返回对象类型而不是它包含的值?

  29. 29

    为什么此对象“ forEach不是函数”?

热门标签

归档