Re: Ужас под заголовком C++11 FAQ
От: Дрободан Фрилич СССР  
Дата: 18.10.11 15:33
Оценка: :)
Здравствуйте, Caracrist, Вы писали:

C>здесь

C>
C>    class Widget {    // Three alternative implementations represented as a union
C>    private:
C>        enum class Tag { point, number, text } type;    // discriminant
C>        union {        // representation
C>            point p;      // point has constructor
C>            int i;
C>            string s;     // string has default constructor, copy operations, and destructor
C>        };
C>        // ...
C>        widget& operator=(const widget& w)     // necessary because of  the string variant
C>        {
C>            if (type==Tag::text && w.type==Tag::text) {
C>                s = w.s;        // usual string assignment
C>                return *this;
C>            }

C>            if (type==Tag::text) s.~string();    // destroy (explicitly!)

C>            switch (type==w.type) {
C>            case Tag::point: p = w.p; break;    // normal copy
C>            case Tag::number: i = w.i; break;
C>            case Tag::text: new(&s)(w.s); break;    // placement new
C>            }
C>            type = w.type;
C>            return *this;
C>        }
C>    };
C>


C>Я выделил не понятные мне места.


C>point p; — это какого типа переменная? с моей точки зрения это равнозначно написанию:

C>42 р;

C>new(&s)(w.s); — такое в операторе присваивания, это бесплатное пособие по UB


А меня смущает enum class Tag.
Что это означает? Раньше такого не встречал...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.