Thursday, June 20, 2013

Короткое замыкание в С++

Инициализация ссылки
Как известно, в С++ ссылки, являющиеся переменными класса, нужно инициализировать в списке инициализации конструктора:
class A() {
   std::vector<int> & m_refData; // ссылка на массив
}
См. короткое замыкание...



A::A(std::vector<int> & data)
: m_refData(data) // инициализация ссылки входящим массивом списке инициализации
{
   m_refData = data; //ошибка! Здесь нельзя инициализировать ссылку! 
                                // Здесь это является вызовом оператора =
}
Короткое замыкание
А теперь о прекрасном. Как проинициализировать ссылку, когда нечем? Например в конструкторе по-умолчанию?
Первое что приходит в голову - использовать указатель со значением NULL по-умолчанию.

Не-ет, умельцы догадались, что можно замкнуть ссылку на себя. Звучит страшно, как короткое замыкание:
A::A(std::vector<int> & data)
: m_refData(m_refData) // инициализация ссылки самой собой
{
}

No comments:

Post a Comment