Инициализация переменной функцией в списке инициализации [duplicate]

Сначала используйте Array.from() , чтобы превратить строку в массив, затем Array.prototype.reverse() , чтобы отменить массив, а затем Array.prototype.join() , чтобы вернуть строку.

const reverse = str => Array.from(str).reverse().join('');

8
задан limlim 10 October 2010 в 09:19
поделиться

2 ответа

На самом деле нет проблем. За исключением того, что будьте осторожны, чтобы порядок инициализации НЕ был порядком, в котором вы указываете инициализаторы в списке инициализации. Приказ - это тот, в котором ваши участники были объявлены в классе. Помимо этой потенциальной проблемы, я не вижу ее. НТН

2
ответ дан Armen Tsirunyan 20 August 2018 в 10:41
поделиться

Есть ли проблема инициализации numRow, numCol в списке инициализации [...]?

В общем случае существует две проблемы с это:

  1. При инициализации объектов в списке инициализации объект еще не полностью сконструирован. Поэтому, когда вы вызываете нестатические функции-члены, вы вызываете их на еще не полностью сконструированный объект . Если эти функции пытаются использовать любой под-объект объекта, который не был сконструирован, вы вызываете Undefined Behavior .
  2. Порядок инициализации - это порядок объявления членов в определении класса , а не порядок, в котором они перечислены в список инициализации . Поэтому вам нужно обратить внимание на инициализацию членов, требующих данных от других участников. (Это можно рассматривать как под-проблему предыдущего: использование еще не построенных под-объектов.) Лучше избегать таких ситуаций, но если их не избежать, добавьте большой, страшный комментарий к тому, где объявлены члены в определении класса, подчеркивая важность их порядка.

В вашем конкретном примере это не имеет значения, поэтому вы safe для этого.

11
ответ дан sbi 20 August 2018 в 10:41
поделиться
  • 1
    Другими словами: нет проблем, если вы знаете о последствиях – valdo 10 October 2010 в 09:43
  • 2
    @valdo: Размышляя об этом, возможно, что вызов функций-членов на еще не полностью сконструированном объекте технически вызывает UB , даже если эта функция-член не имеет доступа ни к одному из но построенные члены. Я не уверен в этом. (На практике, конечно, это безопасно, пока вы не получаете доступа к каким-либо еще не построенным объектам, отличным от POD.) – sbi 10 October 2010 в 09:49
Другие вопросы по тегам:

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