Задать вопрос
@Anvario0

Что означает T()?

Смотрю сейчас видео по односвязному списку на C++. Код списка:
template <typename T>
class List{
public:
	List();
	~List();

	void clear(); //Очищение списка
	void pop_front(); //Удаление первого элемента списка
	void push_back(T data); //Добавление элемента в конец списка
	int GetSize() { return this->size; } //Получение длины списка

	T& operator[](const int index);
private:

	template <typename T>
	class Node {
	public:
		Node* pNext;
		T data;

		Node(T data = T(), Node* pnext = nullptr) {
			this->pNext = pNext;
			this->data = data;
		}
	};

	int size;
	Node<T>* head;

Меня смутил конструктор вложенного класа Node, а именно запись T data = T(). В видео было сказано, что мы это делаем для того, чтобы в переменной data не лежал мусор, но не объяснили что вообще такое T() и что оно вовращает. Это я и хотел у вас узнать
  • Вопрос задан
  • 429 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@rPman
T() вызовет конструктор по умолчанию для типа T, тут это переменная шаблона, т.е. тот тип что указан при определении переменной класса List<имя_типа_или_класса>, который собственно тут описан.

В данном случае возвращать будет новый экеземпляр объекта T в качестве значения аргумента data по умолчанию, если конструктор класса Node будет вызван без аргументов.

Если честно у меня вопрос, что будет если тип T будет указан скалярный, типа int, определено ли значение по умолчанию для таких типов?
upd. погуглил пишут да, в контексте шаблонов это нормально и значение по умолчанию определено
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы