Есть ли конструктор у базовых типов, например int?
В C++ конструкторы и деструкторы имеют только классовые типы.
Остальные типы не имеют ни конструкторов, ни деструкторов.
Но синтаксис языка, вкупе с правилами инициализации, позволяют использовать идентичные (или почти идентичные) конструкции инициализации как для классовых, так и для не классовых типов. Например, имеется такой синтаксис инициализации:
int x(10);//кажется, что это создание int с вызовом конструктора
Но в C++ для классовых и не классовых типов прописаны разные правила инициализации при одинаковом синтаксисе, приводящие к похожим результатам. Просто представьте, что такой синтаксис бы отсутствовал. Возьмем шаблон:
template<typename T>
void foo(T obj) {
T obj2(obj1);
}
//...
foo(std::string(""));//ok
foo(10);//ошибка
Пришлось бы изобретать новое нечто, чтобы обойти проблему, коих и так хватает. Сейчас же такой код абсолютно законен, и будет приводить просто к использованию разных правил инициализации в зависимости от типа.
Тоже самое касается кода, приведенного @KoVadim в комментариях:
using Int = int; int main(){ Int a = 1; a.~Int(); }
он показывает еще одно из правил языка, позволяющее сгладить различия между классовыми и не классовыми типами, в частности, в шаблонах. Если бы этого правила не было, пришлось бы городить дополнительные "костыли" для решения проблем с отсутствием деструктора у типа при явном его (деструкторе) вызове.
P.S. Не всё что плавает и крякает является уткой, и это очень хорошо показано в фильме "Особенности национальной охоты".
Да. Но не в обычном понимании. У базовых типов в С++ есть тривиальные конструкторы по умолчанию, которые нельзя изменить.
Конструктор в обычном понимании (которые может определить программист) представляет из себя функцию-член для какого-либо класса. int и прочие базовые типы являются POD-типами (Plain Old Data - простая структура данных). Здесь можно узнать больше про POD-типы: POD типы в C++.
Относительно тривиальных конструктов - они описываются в этой статье на cpprefernce.com, в разделе, посвященном тривиальным конструкторам (Trivial constructor): Default constructors. В частности, упоминается следующее (приведу перевод с английской версии, потому что русская версия cppreference очень сырая):
Конструктор является тривиальным если соблюдаются следующие условия:
Тривиальным конструктором по умолчанию является конструктор, который не выполняет никаких действий. Все типы данных, совместимые с языком C (POD типов) имеют тривиальный конструктор по умолчанию.
Также в книге Бьярна Страуструпа "Принципы и практика с использованием C++" в главе 9 (посвященной конструкторам) упоминается наличие у базовых классов конструкторов по умолчанию.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Создал onion-сайт, но переменная $_SERVER не отображает ничего полезногоМне кажется, можно как-то получить информацию о цепочке, её IP и т
Подскажите, пожалуйста, как должно выглядеть регулярное выражение для проверки имени пользователя, которое не должно начинаться с цифры...
Всем привет! Как при отправке ajax запроса, либо при его получении обработчиком изменить формат даты? input type="date" принимает дату в формате...