ITBlogs

Сообщество IT-профессионалов
Welcome to ITBlogs Sign in | Join | Help
in Search

Путь программиста

explicit конструктор в C++

C++ изобилует темными местами, которые в целом не вызывают сложностей в понимании, однако малоизвестны из-за своей редкой употребимости. Например ключевое слово explicit, мало кому известно, на практике лично я им пользовался ровно 0 раз, тем не менее полезно хотя бы иметь в виду что оно делает.

Ключевое слово explicit запрещает автоматическое создание конвертирующего конструктора. Вот так работает конвертирующий консруктор, создаваемый компилятором автоматически:
class FruitBasket {
public: FruitBasket(int);
}

// ...

FruitBasket fb = 5; // Прокатит! Автоматическое преобразование int в объект
FruitBasket


А вот так можно запретить создание автоматичекого конвертирующего конструктора:

class FruitBasket {
public: explicit FruitBasket(int);
}

// ...

FruitBasket fb = 5; // Не прокатит!
FruitBasket fb = FruitBasket(5); // Прокатит! Сработает копирующий конструктор, который тоже создается автоматически


Оригинал данного сообщения находится здесь

Published 28 августа 2009 г. 11:34 by Путь программиста
Filed under:

Comments

No Comments
Anonymous comments are disabled
Powered by Community Server (Personal Edition), by Telligent Systems