为什么复制构造函数会自动将我的数据转换为其他类型?

用户名

我找不到合适的标题-如果您有更好的描述,请对其进行编辑。希望有人可以帮助我了解正在发生的事情。我有以下代码,我刚刚在Linux上编译了-它可以工作。我只是不明白当我Foo用a调用const char*,它如何被(编译器?)转换为我的对象的Test

#include <iostream>
#include <cstring>

class Test
{
public:
  Test(const char* _data = "")
  {
    int length = strlen(_data);
    internalData = new char[length+1];
    strncpy(internalData, _data, length);
    internalData[length] = '\0';
  }
  char* internalData;
};

class Bar
{
public:
  void Foo(Test _data)
  {
    std::cout << "Data: " << _data.internalData << std::endl;
  }
};

int main(int argc, char* argv[])
{
  Bar b;
  b.Foo("This is my data");
}

// Output: Data: This is my data

所以,我很好奇为什么/如何工作-是编译器吗?运行?是否有文档说明为什么-有人可以提供链接?

0x499602D2

编译器必须查找从char const*的有效转换Test,因此它搜索从的构造函数Test以转换参数。这是§12.3/ 1(强调我的)允许的标准行为:

类对象的类型转换可以由构造函数和转换函数指定这些转换称为用户定义的转换,用于隐式类型转换(第4章),初始化(8.5)和显式类型转换(5.4、5.2.9)。

隐式转换序列创建一个临时实例,Test然后将其复制或移动到参数中。实际上,编译器可以通过称为copy-elision的优化来消除此复制/移动

如果要防止隐式转换,可以标记构造函数explicit

explicit Test(char const* = "");

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将我自己的数据构造函数转换为Haskell中的List

来自分类Dev

无法将对象从DBNull强制转换为构造函数中的其他类型

来自分类Dev

当存在其他构造函数时,为什么“ ctor()= default”会更改行为?

来自分类Dev

在没有默认构造函数的情况下将数据从矢量转换为其他

来自分类Dev

在没有默认构造函数的情况下将数据从矢量转换为其他

来自分类Dev

如何将我的数据正确转换为所需的类型?

来自分类Dev

为什么我会从'double'转换为'float',可能会丢失数据警告?(c)

来自分类Dev

为什么在发布方法后,我的整数对象会自动转换为字符串?

来自分类Dev

为什么使用cbind创建新数据框会自动将数字列转换为因数?

来自分类Dev

为什么我的 Sub 会触发其他尚未调用的函数?

来自分类Dev

为什么我的常量整数类型会转换为字符串?

来自分类Dev

为什么我的常量整数类型会转换为字符串?

来自分类Dev

为什么C / C ++会自动将char / wchar_t / short / bool / enum类型转换为int类型?

来自分类Dev

为什么我需要在Python中复制类实例,而无需复制其他对象类型?

来自分类Dev

为什么R中的as.Date函数会将我输入的年份转换为当前2020年?

来自分类Dev

为什么我的程序多次调用复制构造函数?

来自分类Dev

为什么我的程序多次调用复制构造函数?

来自分类Dev

为什么我的postgresql自定义类型构造函数会产生错误:类型只是一个shell?

来自分类Dev

禁止复制构造函数,但允许其他类型的隐式复制

来自分类Dev

为什么`join`和/或`JSON :: to_json`默默地将我的数据从整数转换为字符串?

来自分类Dev

为什么将a从数组强制转换为指针会破坏我的数据?

来自分类Dev

为什么我的多部分表单数据会转换为JSON?

来自分类Dev

为什么复制构造函数无法“复制”

来自分类Dev

为什么我会收到“未找到类型 'String' 上的公共成员 'Field' 的消息。” 在 VB.Net 中将我的数据表行转换为 List(Of Object) 时出现异常?

来自分类Dev

为什么无法识别我的类型构造函数

来自分类Dev

为什么Rust无法在类型构造函数中将可变引用强制转换为不可变引用?

来自分类Dev

为什么在我的代码中调用复制构造函数而不是移动构造函数?

来自分类Dev

从列表的类型转换为其他类型

来自分类Dev

为什么添加析构函数会更改此结构的复制构造函数行为?

Related 相关文章

  1. 1

    如何将我自己的数据构造函数转换为Haskell中的List

  2. 2

    无法将对象从DBNull强制转换为构造函数中的其他类型

  3. 3

    当存在其他构造函数时,为什么“ ctor()= default”会更改行为?

  4. 4

    在没有默认构造函数的情况下将数据从矢量转换为其他

  5. 5

    在没有默认构造函数的情况下将数据从矢量转换为其他

  6. 6

    如何将我的数据正确转换为所需的类型?

  7. 7

    为什么我会从'double'转换为'float',可能会丢失数据警告?(c)

  8. 8

    为什么在发布方法后,我的整数对象会自动转换为字符串?

  9. 9

    为什么使用cbind创建新数据框会自动将数字列转换为因数?

  10. 10

    为什么我的 Sub 会触发其他尚未调用的函数?

  11. 11

    为什么我的常量整数类型会转换为字符串?

  12. 12

    为什么我的常量整数类型会转换为字符串?

  13. 13

    为什么C / C ++会自动将char / wchar_t / short / bool / enum类型转换为int类型?

  14. 14

    为什么我需要在Python中复制类实例,而无需复制其他对象类型?

  15. 15

    为什么R中的as.Date函数会将我输入的年份转换为当前2020年?

  16. 16

    为什么我的程序多次调用复制构造函数?

  17. 17

    为什么我的程序多次调用复制构造函数?

  18. 18

    为什么我的postgresql自定义类型构造函数会产生错误:类型只是一个shell?

  19. 19

    禁止复制构造函数,但允许其他类型的隐式复制

  20. 20

    为什么`join`和/或`JSON :: to_json`默默地将我的数据从整数转换为字符串?

  21. 21

    为什么将a从数组强制转换为指针会破坏我的数据?

  22. 22

    为什么我的多部分表单数据会转换为JSON?

  23. 23

    为什么复制构造函数无法“复制”

  24. 24

    为什么我会收到“未找到类型 'String' 上的公共成员 'Field' 的消息。” 在 VB.Net 中将我的数据表行转换为 List(Of Object) 时出现异常?

  25. 25

    为什么无法识别我的类型构造函数

  26. 26

    为什么Rust无法在类型构造函数中将可变引用强制转换为不可变引用?

  27. 27

    为什么在我的代码中调用复制构造函数而不是移动构造函数?

  28. 28

    从列表的类型转换为其他类型

  29. 29

    为什么添加析构函数会更改此结构的复制构造函数行为?

热门标签

归档