МН Вход / Вход SQL - Как управлять?

Вот сводка разных вещей, которые были сказаны, и что я думал.

Две главных причины, почему ссылка на пустоту запрещена

<час>

1 , Они были бы полностью бесполезны.

Действительно, если мы оглядываемся назад во времена C, пустые указатели имели две цели:

  • управление памятью (например, malloc)
  • Степень универсальности (пишущий функции, которые могут принять любой тип аргументов)

, Когда C++ вышел, шаблоны стали лучшим решением реализовать степень универсальности. Однако пользовательское управление памятью все еще должно было быть возможным, и совместимость между C++, и C был главным беспокойством, таким образом, пусто* был сохранен. Гипотетическая пустая ссылка не имела бы справки с управлением памятью, и степень универсальности уже охвачена, так в основном это имело бы почти быть бесполезное (за исключением гарантии непустых описанным ниже).

2 Вы не были бы в состоянии сделать что-либо с ним

При использовании пустого указателя, Нельзя разыменовать его; транспонированный к случаю ссылок, который означает, Вы не можете использовать (всегда гипотетический) пустая ссылка. Так

void *data = // something
// using *data and data-> is forbidden

void &data = // something
// using data is forbidden

Однако мы могли думать о варианте использования, где ссылка не должна будет быть "разыменована" (эта фраза является ужасно неправильной, но Вы понимаете мою мысль), но где мы только взяли бы ее адрес. Давайте предположим, что у меня есть следующая функция:

void foo(void *dataptr)
{
    assert(dataptr != NULL); // or != 0
    // do something with dataptr
}

Для предотвращения этого раздражения утверждают, я мог записать функции этот путь:

void foo(void &dataref)
{
    void *data = &dataref;
    // do something with data
}

Однако для этого для работы, &dataref потребности быть эквивалентным dataptr, , который не имеет место : &dataref эквивалентно &*dataptr!

Поэтому даже взятие адреса подразумевает разыменование, по крайней мере, концептуально (негласно, первая эквивалентность, вероятно, верна, но на семантическом уровне это не). Следовательно, нет абсолютно никакого использования, которое мы можем сделать из данных, таким образом, пустые ссылки являются аберрацией.

20
задан Ian Carpenter 19 October 2018 в 16:11
поделиться

3 ответа

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

Вы все еще можете добавьте пару имя / значение по вашему выбору в PLSQL_CCFLAGS и пусть код вашего приложения выполнит относительно легкий запрос параметра v $, чтобы определить, "включено ли ведение журнала". Самая грубая реализация - одна пара имя / значение,

[Изменить] Вот очень простой пример в ответ на ваш комментарий / запрос - вы, очевидно, захотите более изощренно анализировать строку PLSQL_CCFLAGS на случай, если в ней есть другая существующая информация, возможно, обернуть ее в функцию и т.д. пользователь, имеющий право выдавать ALTER SYSTEM:

ALTER SYSTEM set PLSQL_CCFLAGS = 'custom_logging: true';

и переключаться назад:

ALTER SYSTEM set PLSQL_CCFLAGS = '';

7
ответ дан 30 November 2019 в 01:20
поделиться

В нашем приложении мы активно используем инструментарий Ask Tom's debug.f. Одна вещь, которую я быстро заметил, заключалась в том, что «вкладку отладки» слишком часто запрашивали, чтобы увидеть, было ли ведение журнала для каждого отдельного сообщения журнала. Я внес в него изменения, чтобы проверять таблицу только один раз на каждые 100 сообщений журнала, и теперь он работает очень хорошо.

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

3
ответ дан 30 November 2019 в 01:20
поделиться

.

не было бы легче настроить контекст и добавить пару нуменного значения? Вы можете изменить значение в контексте с помощью триггера на таблице Debugtab.

1
ответ дан 30 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

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