Описание тега explicit-constructor
В C++ добавление префикса явного ключевого слова к конструктору не позволяет компилятору использовать этот конструктор для неявных преобразований.
2
ответа
Не получается ожидаемое поведение с "явным" ключевым словом в C++
У меня есть следующие классы class abc { private: string name_; public: explicit abc(string name); }; class xyz { private: abc obj_abc_; public: xyz ():obj_abc_("NOTHING") { }; //I think this should give an error since explicit is used. }; Согласно …
12 дек '14 в 15:55
4
ответа
Когда конструктор C++ не вызывается?
У меня есть ситуация, когда ни один конструктор не вызывается: #include <iostream> using namespace std; int main () { class yoyo { public: int i; yoyo() { i = 0; cout << "defaultly initialized to 0" << endl; } yoyo (int j) : i(j) {…
25 июн '13 в 00:54
12
ответов
Что означает явное ключевое слово?
Что это explicit Ключевое слово означает в C++?
23 сен '08 в 13:58
1
ответ
Явный конструктор C++, вызываемый в неявной ситуации
Я скомпилировал код ниже, используя g++ 6.3.0, с опцией -std= C++14. #include <utility> #include <iostream> struct A{ int x; A(const A&)=default; A(int x):x(x){} }; struct B{ A a; template<class... Args> B(Args&&... arg…
15 сен '17 в 18:29
3
ответа
Есть ли недостаток в маркировке всех конструкторов C++ явным?
Несколько раз при рефакторинге кода я забывал добавить explicit ключевое слово при добавлении параметра в конструктор без параметров или при удалении параметров из конструктора с несколькими параметрами. Чтобы предотвратить это, я привык отмечать ка…
18 апр '11 в 13:14
3
ответа
Есть явная копия
Я ищу такой синтаксис: class Hugo { Hugo(); explicit Hugo( const Hugo& hugo ); Hugo GetRandomHugo() { Hugo hugo; hugo.value = rand(); // this would fail: // return hugo; return Hugo(hugo); // explicit copy!! } }; Другими словами: я ищу явный синтакс…
26 ноя '10 в 13:19
5
ответов
Явный конструктор перемещения?
explicit Ключевое слово рекомендуется для всех большинства конструкторов, которые можно вызывать с одним аргументом, за исключением конструкторов копирования. Для конструкторов копирования он имеет применение (запретить неявное копирование с помощью…
20 июл '11 в 07:55
1
ответ
Явный конструктор и перегрузка
template<typename T> class RAII { public: explicit RAII( T* p = 0 ): p_(p){} ~RAII() {delete p_;} T& operator*() const { return p_;} T* operator‐>() const{ return p_;} }; //Usage example: { RAII<std::vector<int>> r(new std::…
09 янв '13 в 08:45
1
ответ
Копировать конструктор и перегруженный оператор сложения
Я рассматриваю перегрузку операторов в C++. Просто для удовольствия я реализую BigInt учебный класс. Первый оператор, который я хочу перегрузить, это оператор сложения. Я решил перегрузить этот оператор как функцию, не являющуюся другом. Вот MWE это…
10 июн '18 в 18:21
2
ответа
Явный конструктор не одного параметра
Кто-нибудь может объяснить, почему конструктор не одного параметра помечен как явная компиляция? Насколько я понимаю, это абсолютно бесполезное ключевое слово, так почему же это компилируется без ошибок? class X { public: explicit X(int a, int b) { …
27 ноя '13 в 13:41
1
ответ
Почему конструктор std::bitset с длинным длинным аргументом без знака не помечен как явный?
Шаблон класса Стандартная библиотека std::bitset<N> имеет конструктор (C++11 и далее, unsigned long аргумент перед C++11) constexpr bitset(unsigned long long) noexcept Вопреки многим рекомендациям, этот конструктор с одним аргументом не помече…
14 сен '14 в 12:48
1
ответ
Почему этот явный деструктор вызывает повреждение памяти в общем ptr?
Что не так с этим кодом и как я могу это исправить? #include <iostream> #include <boost/shared_ptr.hpp> #include <vector> struct CTest { CTest() { std::cout << "ctor CTest" <<std::endl; } ~CTest() { std::cout << "…
29 дек '11 в 10:04
2
ответа
Наследование и явные конструкторы?
Рассмотрим следующий код: template<typename T> class Base { Base(); Base(const Base<T>& rhs); template<typename T0> explicit Base(const Base<T0>& rhs); template<typename T0, class = typename std::enable_if<std::…
16 авг '12 в 16:09
2
ответа
Почему конструктор в этом коде C++ неоднозначен и как я могу это исправить?
В приведенном ниже коде компилятор не может определить, какой конструктор я хочу использовать. Почему и как мне это исправить? ( Живой пример) #include <tuple> #include <functional> #include <iostream> template<typename data_typ…
14 мар '18 в 14:43
11
ответов
Прекращение преобразования C++ из строковой константы в 'char*'
У меня есть класс с private char str[256]; и для этого у меня есть явный конструктор: explicit myClass(const char *func) { strcpy(str,func); } Я называю это так: myClass obj("example"); Когда я компилирую это, я получаю следующее предупреждение: уст…
06 окт '09 в 08:45
4
ответа
Неявное преобразование из int в вектор?
vector<T> имеет конструктор, который принимает размер вектора, и, насколько я знаю, он является явным, что может быть доказано тем фактом, что следующий код не может скомпилировать void f(std::vector<int> v); int main() { f(5); } Я не мо…
07 май '13 в 20:25
3
ответа
Деструктор класса, неявно определенного
Рассмотрим случай класса, который не имеет destructor а также constructor явно заявлено разработчиком. Я понимаю что destructor для класса будет implicitly declared в этом случае. Тогда правда ли, что destructor является implicitly defined, только к…
19 дек '11 в 14:57
1
ответ
Явные конструкторы по умолчанию в C++17
В C++17 пустые типы тегов в стандартной библиотеке теперь имеют конструкторы по умолчанию, помеченные explicit и также = default, Например, std::piecewise_construct_t теперь определяется как struct piecewise_construct_t { explicit piecewise_construc…
24 май '17 в 23:48
5
ответов
Предотвратить нежелательное преобразование в конструкторе
Согласно здесь, explicit: Определяет конструкторы и операторы преобразования (начиная с C++11), которые не допускают неявные преобразования или инициализацию копирования. Таким образом, эти две техники идентичны? struct Z { // ... Z(long long); // c…
19 апр '16 в 14:53
1
ответ
Почему я могу назначить QObject* на QObject?
Рассмотрим следующий код: #include <QObject> class A : public QObject { Q_OBJECT public: A(QObject* parent = 0) : QObject(parent) {} } int main() { A a = new A(); return 0; } Почему я могу назначить объект типа A* к переменной типа A без жалоб…
19 май '15 в 09:59