Инициализация объектов в с ++ - PullRequest
0 голосов
/ 22 октября 2018

Существует несколько способов инициализации объекта в c ++.Ниже приведены два примера: ent1 и ent2.Мне интересно, в чем разница, и является ли один из них более «правильным» или предпочтительным по сравнению с другим?

class Entity {
public:
    int h;
    Entity(int health) : h(health) { }
}

Entity ent1(10);

Entity ent2 = Entity(10);

1 Ответ

0 голосов
/ 22 октября 2018

В C ++ 17 оба они идентичны.До C ++ 17, однако, есть небольшая разница в следующем:

Нижеследующее является конструктором копирования.Это создаст анонимную сущность, а затем скопирует в ent2, хотя копия может быть опущена при условии copy epsilon .

Entity ent2 = Entity(10);

Нижеприведенная копия является прямымПамять для ent1 будет выделена, а значение 10 будет помещено в область, указанную конструктором.

Entity ent1(10); 

Причина, по которой прямой предпочтительнее, до C ++ 17, заключается в том, что это не тактребуется дополнительный шаг копирования.Это преимущество отсутствует в C ++ 17.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...