Отладочные данные в 'анонимных пространствах имен' (C++)

Точка этого - то, что любые переменные, объявленные в интересном материале, не будут созданы в глобальном пространстве имен. Любая функция в JavaScript создаст такой объем. Предположим, что у Вас есть некоторый JavaScript, который Вы хотите запустить. Если Вы делаете это:

var b = 1; 
// stuff using b

И некоторый другой код использует b, это получит Ваше перенесенное значение. (Или, еще хуже, если некоторые другие кодовые наборы b перед Вашими выполнениями кода, то попытки получить его старое значение позже, Вы изменили бы его тем временем.)

, С другой стороны, если у Вас есть этот код, который объявляет и затем вызывает функцию:

function a() { 
     var b = 1;
}

a();

И некоторый другой код позже использует b, он не будет видеть Ваши значения, так как b локален для функции. Проблема с этим, конечно, состоит в том, что Вы все еще делаете глобальное имя - "a" в этом случае. Так, мы хотим функцию без имени - это - то, почему Вы получаете код, который Вы описали. Это объявляет функцию без имени и затем называет его.

, К сожалению, Вы не можете просто сказать:

function() { ... }()

, потому что это будет проанализировано как оператор объявления функции и затем синтаксическая ошибка. Путем обертывания объявления функции в круглую скобку Вы получаете функцию выражение , которое можно тогда назвать. Вы называете его как любое другое выражение function (как a, выше), с помощью второго набора parens. Например, если бы функция взяла аргументы, то Вы передали бы их туда:

(function(a) { ... })(1)
12
задан Andreas Haferburg 28 September 2017 в 11:39
поделиться

1 ответ

Это упомянуто в MSDN . Не похоже, что в окне Watch есть хорошее решение (я думаю, вы можете получить оформленное имя вашего класса из листинга).

Ваша идея с "глупым пространством имен" сработает нормально, вы также можете просто объявить идентичный класс с глупым именем и вместо этого привести его к этому типу.

9
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

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