Спецификатор explicit
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
Указывает, конструкторы и операторы преобразования(начиная с C++11), которые не могут использоваться для неявного преобразования
Оригинал:
Specifies constructors and (начиная с C++11) conversion operators that don't allow implicit conversions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Синтаксис
| explicit class_name ( params ) | |||||||||
| explicit operator type ( ) (начиная с C++11) | |||||||||
[править] Пример
Запустить этот код
struct A { A ( int ) {} operator int() const { return 0; } }; struct B { explicit B(int) {} explicit operator int() const { return 0; } }; int main() { // A не содержит конструкторов/операторов преобразования с explicit. Все в порядке A a1 = 1; A a2 ( 2 ); A a3 { 3 }; int na1 = a1; int na2 = static_cast<int>( a1 ); B b1 = 1; // Ошибка: неявное преобразование int в B B b2 ( 2 ); // OK: явный вызов конструктора B b3 { 3 }; // OK: явный вызов конструктора int nb1 = b2; // Ошибка: неаяное преобразование B вint int nb2 = static_cast<int>( b2 ); // OK: явное преобразование }

