константный объект для конструктора копирования - PullRequest
0 голосов
/ 28 февраля 2012

Я читаю о конструкторе копирования. может ли кто-нибудь сказать мне, что происходит в приведенном ниже утверждении

class Base {
public:
Base() {cout << "Base constructor";}
Base(const Base& a) {cout << "copy constructor with const arg";}
Base(Base& a) {cout << "copy constructor with non-const arg"; return a;}
const Base& operator=(Base &a) {cout << "assignment operator with non-const arg"; return a;}
}

void main()
{
    Base a;
    Base b = Base(); // This is neither calling copy constructor nor assignment operator.
}

Пожалуйста, скажите мне, что происходит в операторе "Base b = Base ()".

1 Ответ

0 голосов
/ 28 февраля 2012

Конструктор копирования будет вызываться в трех случаях:

When an object is returned by value 
When an object is passed (to a function) by value as an argument 
When an object is thrown 
When an object is caught 
When an object is placed in a brace-enclosed initializer list 

будет вызываться оператор присваивания, когда ниже:

B b;
b=a;

поэтому ваше утверждение:

Base b = Base(); 

не подходит ни для одного из вышеперечисленных.

...