Как ленивый C++ банки глобальная инициализация быть?

Eilon предполагает, что можно сделать это как это:

, Если у Вас есть больше чем одна кнопка, можно различать их путем давания каждой кнопке имени:



В Вашем методе действия контроллера можно добавить параметры, названные в честь имен тега ввода HTML:

public ActionResult DoSomeStuff(string saveButton, string
cancelButton, ... other parameters ...)
{ ... }

, Если какое-либо значение отправляется на один из тех параметров, который означает, что кнопка была той, которая была нажата. Веб-браузер только отправит значение для одно кнопка, которая была нажата. Все другие значения будут пустыми.

if (saveButton != null) { /* do save logic */ }
if (cancelButton != null) { /* do cancel logic */ }

мне нравится этот метод, поскольку он не полагается на свойство значения кнопок отправки, которое, более вероятно, изменится, чем присвоенные имена и не требует, чтобы JavaScript, который будет включен

, Видел: http://forums.asp.net/p/1369617/2865166.aspx#2865166

9
задан Joseph Garvin 6 August 2009 в 14:26
поделиться

3 ответа

Стандарт имеет следующее в 3.6.2 / 3:

Это определяется реализацией, будет ли динамическая инициализация (8.5, 9.4, 12.1, 12.6.1) объекта из область пространства имен выполняется перед первым оператором main. Если инициализация отложена до какой-то точки во времени после первого оператора main, это должно произойти до первого использования любой функции или определенного объекта в той же единице трансляции, что и инициализируемый объект.

Но o Конечно, вы никогда не официально никогда не сможете сказать, когда происходит инициализация , поскольку инициализация произойдет до того, как вы получите доступ к variable! следующим образом:

// t1.cc
#include <iostream>
int i1 = 0;

int main () {
  std::cout << i1 << std::endl

// t2.cc
extern int i1;
int i2 = ++i1;

Я могу подтвердить, что g ++ 4.2.4 по крайней мере, похоже, выполняет инициализацию 'i2' перед main.

6
ответ дан 4 December 2019 в 23:07
поделиться

Проблема, которую хотелось решить с помощью этого правила, - это проблема динамической загрузки. Допуск не ограничивается динамической загрузкой и формально может иметь место для других случаев. Я не знаю реализации, которая использовала бы его для чего-либо еще, кроме динамической загрузки.

1
ответ дан 4 December 2019 в 23:07
поделиться

Давайте рассмотрим псевдокод:

В DLL:

static int ItsDllVar = 1;
int EXPORTED_FUNCTION() { return ItsDllVar; }

В приложении:

static int AppVar1 = 2;
static int AppVar2 = EXPORTED_FUNCTION() + AppVar1;

Итак, согласно статической инициализации AppVar2 получает 1 + 2 = 3

Ленивая инициализация применима для локальных статические переменные (независимо от DLL)

int f()
{
    static int local_i = 5;//it get's 5 only after visiting f()
    return local_i;
}
0
ответ дан 4 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

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