显式复制构造函数调用语法

赛义德·H

当我将副本构造函数声明为显式时,使用=而不是()调用它不会编译。这是我的代码:

class Base
{
    public:
        explicit Base(){cout<<__PRETTY_FUNCTION__<<endl;}
        explicit Base(Base& b){cout <<__PRETTY_FUNCTION__<<endl;}
};

int main()
{
    Base a;
    Base b=a;
}

编译器说:

错误:没有匹配的函数可以调用'Base :: Base(Base&)'

如果我将其更改为

Base b(a);

它编译良好。我以为C ++认为这两种实例化样式相同。如果我删除显式关键字,则它确实可以双向工作。我猜我使用=时会发生一些隐式转换。那我在这里想念什么?

量子开发

不,他们不一样。C ++标准部分第12.3.1节[class.conv.ctor]

显式构造函数与非显式构造函数一样构造对象,但仅在显式使用直接初始化语法(8.5)或强制类型转换(5.2.9,5.4)的情况下才构造对象


Base b(a); // Direct initialization
Base b=a;  // Copy initialization

复制初始化(使用=)不考虑显式构造函数,但直接初始化(使用())则考虑。

如果要使用副本初始化,则必须使用强制转换或使构造函数不明确。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在复制初始化中,对复制构造函数的调用是显式还是隐式的?

来自分类Dev

C ++显式复制构造函数?

来自分类Dev

显式强制调用构造函数?

来自分类Dev

复制/移动省略与显式删除的复制/移动构造函数

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

隐式与显式默认构造函数调用

来自分类Dev

显式复制构造函数和std :: sort

来自分类Dev

Java泛型-构造函数调用的显式类型参数

来自分类Dev

C#中的显式构造函数调用

来自分类Dev

Java泛型-构造函数调用的显式类型参数

来自分类Dev

显式move构造函数

来自分类Dev

显式Expr构造函数

来自分类Dev

显式move构造函数

来自分类Dev

C ++:派生类隐式调用显式构造函数

来自分类Dev

隐式超级构造函数Person()未定义。必须显式调用另一个构造函数?

来自分类Dev

具有显式构造函数的不可复制类型的C ++ 11数组初始化

来自分类Dev

显式删除永不使用的复制构造函数会产生编译错误

来自分类Dev

复制初始化和显式构造函数-编译器差异

来自分类Dev

显式删除永不使用的复制构造函数会产生编译错误

来自分类Dev

显式调用基类的析构函数/构造函数合法吗?

来自分类Dev

我可以显式地调用类的构造函数和析构函数吗?

来自分类Dev

根据C ++标准,显式调用构造函数和析构函数是否安全?

来自分类Dev

在C ++中从构造函数中显式地调用析构函数是不好的做法吗?

来自分类Dev

CTAD、initializer_list、非显式构造函数和函数调用

来自分类Dev

显式默认的构造函数做什么?

来自分类Dev

什么是c ++内联显式构造函数?

来自分类Dev

显式默认模板构造函数

来自分类Dev

SFINAE enable_if显式构造函数

来自分类Dev

显式副本构造函数的行为

Related 相关文章

  1. 1

    在复制初始化中,对复制构造函数的调用是显式还是隐式的?

  2. 2

    C ++显式复制构造函数?

  3. 3

    显式强制调用构造函数?

  4. 4

    复制/移动省略与显式删除的复制/移动构造函数

  5. 5

    C ++隐式和显式继承构造函数调用

  6. 6

    隐式与显式默认构造函数调用

  7. 7

    显式复制构造函数和std :: sort

  8. 8

    Java泛型-构造函数调用的显式类型参数

  9. 9

    C#中的显式构造函数调用

  10. 10

    Java泛型-构造函数调用的显式类型参数

  11. 11

    显式move构造函数

  12. 12

    显式Expr构造函数

  13. 13

    显式move构造函数

  14. 14

    C ++:派生类隐式调用显式构造函数

  15. 15

    隐式超级构造函数Person()未定义。必须显式调用另一个构造函数?

  16. 16

    具有显式构造函数的不可复制类型的C ++ 11数组初始化

  17. 17

    显式删除永不使用的复制构造函数会产生编译错误

  18. 18

    复制初始化和显式构造函数-编译器差异

  19. 19

    显式删除永不使用的复制构造函数会产生编译错误

  20. 20

    显式调用基类的析构函数/构造函数合法吗?

  21. 21

    我可以显式地调用类的构造函数和析构函数吗?

  22. 22

    根据C ++标准,显式调用构造函数和析构函数是否安全?

  23. 23

    在C ++中从构造函数中显式地调用析构函数是不好的做法吗?

  24. 24

    CTAD、initializer_list、非显式构造函数和函数调用

  25. 25

    显式默认的构造函数做什么?

  26. 26

    什么是c ++内联显式构造函数?

  27. 27

    显式默认模板构造函数

  28. 28

    SFINAE enable_if显式构造函数

  29. 29

    显式副本构造函数的行为

热门标签

归档