Как я узнаю, есть ли у кого-то телеграмма или нет? (Telethon)

Интересно, что об этом говорит стандарт C ++? Является ли законным и гарантированным всегда работать?

Да. Это совершенно законно. Полностью стандартное соответствие.

Blah(std::vector<int> vec): vec(vec){}
                             ^   ^                           
                             |   |
                             |    this is the argument to the constructor
                             this is your member data

Поскольку вы попросили ссылку в стандарте, вот пример.

§12.6.2 / 7

< blockquote>

Имена в списке выражений mem-инициализатора оцениваются в области конструктора, для которого указан mem-инициализатор.

[Example:
class X {
 int a;
 int b;
 int i;
 int j;
 public:
 const int& r;
  X(int i): r(a), b(i), i(i), j(this->i) {}
                      //^^^^ note this (added by Nawaz)
};

инициализирует X :: r для ссылки на X :: a, инициализирует X :: b со значением параметра конструктора i, инициализирует X :: i с значение параметра конструктора i и инициализирует X :: j значением X :: i; это происходит каждый раз, когда создается объект класса X. ]

[Примечание: поскольку mem-инициализатор оценивается в области конструктора, этот указатель может использоваться в списке выражений mem-initializer для ссылки на инициализированный объект. ]

Как вы можете видеть, в приведенном выше примере есть и другая интересная вещь, и комментарий к самому стандарту.


BTW, как сторона примечания, почему вы не принимаете параметр в качестве ссылки const :

 Blah(const std::vector<int> & vec): vec(vec) {}
      ^^^^const              ^reference

Он избегает ненужной копии исходного векторного объекта.

-2
задан mily 10 April 2019 в 10:07
поделиться