используя const_cast по постоянному типу данных [duplicate]

Да, я бы сказал, что это действительно так плохо.

Он прерывает первую нормальную форму.

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

То, что вы называете лень и отсутствие знаний SQL, - это материал, из которого сделаны неофиты. Я рекомендую потратить время, чтобы сделать это правильно, и рассмотреть его как возможность узнать.

Или оставьте это как есть и узнайте болезненный урок атаки SQL-инъекции.

2
задан Andy Prowl 12 May 2013 в 10:29
поделиться

1 ответ

Это какое-то неопределенное поведение с const_cast?

Да, ваша программа содержит неопределенное поведение.

Это означает, что вы не можете ожидать каких-либо ожиданий на его выходе. Причина дается в параграфе 7.1.6.1/4 стандарта C ++ 11:

За исключением того, что любой член класса, объявленный mutable (7.1.1), может быть изменен, любая попытка изменить объект const в течение его времени жизни (3.8) приводит к неопределенному поведению

В параграфе 5.2.11 / 7 на const_cast содержится еще одно предупреждение:

[ Примечание : в зависимости от типа объекта, операция записи через указатель, lvalue или указатель на элемент данных, полученный в результате const_cast, который отбрасывает const -квитатор, может производить неопределенное поведение (7.1.6.1). - end note ]

10
ответ дан Andy Prowl 21 August 2018 в 11:39
поделиться
  • 1
    В основном вы можете использовать const_cast, чтобы отбросить const на то, что на самом деле не на самом деле const. Компилятор может свободно хранить const объекты в ПЗУ или делать оптимизации, полагая, что они никогда не меняются (например, изменение, которое выдает печать, чтобы напечатать постоянное значение времени компиляции или что-то еще, что это похоже) – Yakk - Adam Nevraumont 12 May 2013 в 10:51
Другие вопросы по тегам:

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