Вопросы с тегом 'explicit-constructor'

В префиксе С++ явное ключевое слово конструктору запрещает компилятору использовать этот конструктор для неявных преобразований.
11
ответов

Что означает явное ключевое слово?

Что означает ключевое слово explicit в С++?
задан 23 сент. '08 в 16:58
8
ответов

С++ устарело преобразование из строковой константы в 'char *'

У меня есть класс с private char str[256]; и для него у меня есть явный конструктор: explicit myClass(const char *func) { strcpy(str,func); } Я называю это как: myClass obj("example"); Когда я скомпилирую это, я получаю следующее предупреж...
задан 06 окт. '09 в 11:45
4
ответов

Явный конструктор, принимающий несколько аргументов

Имеет ли какой-либо (полезный) эффект конструктор, имеющий несколько аргументов explicit? Пример: class A { public: explicit A( int b, int c ); // does explicit have any (useful) effect? };
задан 24 авг. '16 в 14:29
4
ответов

Что может пойти не так, если инициализация списка экземпляров разрешена явным конструкторам?

В стандарте С++, §13.3.1.7 [over.match.list], указано следующее: В инициализации списка копий, если выбран конструктор explicit, инициализация плохо сформирована. Вот почему мы не можем сделать, например, что-то вроде этого: struct foo { //...
задан 06 февр. '12 в 10:49
5
ответов

Почему явно разрешены конструкторы по умолчанию и конструкторы с двумя или более параметрами (не по умолчанию)?

Я понимаю, что конструкторы с одним (не по умолчанию) параметром действуют как неявные преобразователи, которые преобразуют из этого типа параметра в тип класса. Тем не менее, explicit может использоваться для квалификации любого конструктора, без п...
задан 17 дек. '10 в 5:17
5
ответов

Явный конструктор перемещения?

Ключевое слово explicit рекомендуется для большинства конструкторов all, которые можно вызвать с помощью одного аргумента, за исключением конструкторов копирования. Для конструкторов копирования он имеет возможность использовать (запретить неяв...
задан 20 июля '11 в 10:55
3
ответов

Есть ли недостаток, чтобы выделить все конструкторы С++ в явном виде?

Несколько раз, когда код рефакторинга, я забыл добавить ключевое слово explicit при добавлении параметра к конструктору без указания параметров или удалению параметров из ранее многопараметрического конструктора. Чтобы предотвратить это, я привык от...
задан 18 апр. '11 в 16:14
3
ответов

С++ 11: инициализация в классе с "= {}" не работает с явным конструктором

В С++ 11 мы можем выполнить инициализацию в классе с помощью "скобки-или-равного-инициализатора" (слова из стандарта), например: struct Foo { /*explicit*/ Foo(int) {} }; struct Bar { Foo foo = { 42 }; }; Но если мы не будем комментировать ex...
задан 01 окт. '14 в 11:37
5
ответов

Предотвращение нежелательного преобразования в конструкторе

В соответствии с здесь, explicit: Задает конструкторы и операторы преобразования (начиная с С++ 11), которые не допускать неявных преобразований или инициализации копий. Таким образом, идентичны ли эти два метода? struct Z { // ... ...
задан 19 апр. '16 в 17:53
2
ответов

Если я использую явный конструктор, нужно ли поставить ключевое слово в файлы .h и .cpp?

На самом деле мой вопрос - все в названии. В любом случае: У меня есть класс, и я использую явный конструктор: .h class MyClass { public: explicit MyClass(const string& s): query(s) {} private: string query; } Обязательно или не ...
задан 08 нояб. '08 в 0:03
3
ответов

Какая разница между явным и неявным назначением в С++

int value = 5; // this type of assignment is called an explicit assignment int value(5); // this type of assignment is called an implicit assignment В чем разница между теми, если таковые имеются, и в каких случаях различают явное и неявное назначе...
задан 17 июня '10 в 2:18
2
ответов

Когда следует использовать прямую инициализацию и при инициализации копии?

Это просто предпочтение или существуют конкретные случаи, когда один необходим другому? Я имею в виду следующие варианты инициализации T t(e); // direct initialization T t = e; // copy initialization
задан 27 нояб. '10 в 22:59
1
ответ

Явные конструкторы по умолчанию в С++ 17

В С++ 17 пустые типы тегов в стандартной библиотеке теперь имеют конструкторы по умолчанию, которые помечены explicit, а также = default. Например, std::piecewise_construct_t теперь определяется как struct piecewise_construct_t { explicit piecewise...
задан 25 мая '17 в 2:48
2
ответов

Какова аргументация конструктора std:: unique_ptr <T> из T *, являющегося явной?

Как std::unique_ptr обеспечивает удобный способ избежать утечек памяти и обеспечения безопасности исключений, разумно передавать их, а не сырые указатели. Таким образом, можно хотеть (член) функции с сигнатурой типа std::unique_ptr<some_type> ...
задан 28 авг. '15 в 14:27
1
ответ

Явный для N-арных конструкторов?

В этой презентации: http://qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf Автор предлагает, чтобы конструкторы N-ary извлекали выгоду из версии ключевого слова explicit версии С++ 11. Что измен...
задан 15 дек. '12 в 0:29