Ключевое слово explicit в C++

by alex 5. September 2011 18:55

Во время чтения книги Страуструпа "Язык программирования С++" я обратил внимание на ключевое слово explicit, которое периодически встречалось в примерах кода, представленных в книге. Это ключевое слово используется для запрещения создания конвертирующего конструктора. Поясню на примере:

class String {
public: 
String (int n);//выделить n байт для создания объекта 
String(const char *p); // инициализировать объект из C-строки 
}
При этом если выполнить следующий код:
String s = 'x';
то 'x' преобразуется в int и будет вызван конструктор String(int). Это совсем не то поведение, которое можно было бы ожидать. Для избежания таких ситуаций и используется ключевое слово explicit:
class String {
public: 
explicit String (int n);//выделить n байт для создания объекта 
String(const char *p); // инициализировать объект из C-строки 
}
Таким образом, объявление конструктора с одним аргументом (или с несколькими аргументами, где все, кроме первого имеют значения по умолчанию) explicit гарантирует неиспользование его в качестве оператора приведения типа.

Tags: ,

Powered by BlogEngine.NET 1.6.1.0
Theme by Extensive SEO