Константные выражения [re: что такое UML?]
где неконстантное?
Скажи, на каком языке твой пример, а?
ты сначала покажи неконстантное выражение.
в switch не может быть std::string,
а также полученный из нее const char*,
std::string s; s.c_str
Константное выражение - это выражение, значение которого можно полностью вычислить во время компиляцииТо, что слабенький C/С++-компилятор не может вычислить эту запись при компиляции - не делает автоматом - эту запись неконстантной.
это понятно, не понятно почему ты обозвал это неконстантным выражением.Я не знаю, что пишет простенький компилятор. Знаю, что такая конструкция в С неверна.
Пункты из стандарта, уж извини, не помню
Мог бы сказать проще - несоответствие типов для case (было бы ясно а мог бы сказать, что у тебя в switch/case указатель, а это (в общем случае говоря) не есть константное выражение.
Ты, кстати, так и не сказал, в каком языке этот пример правильный.
но указатель-то все равно константный получается.
> в каком языке этот пример правильный
в c#, например.
значение которого можно полностью вычислить во время компиляции
но указатель-то все равно константный получается.А теперь см. свое определение константного выражения (выше).
Ведь на этапе компиляции этот указатель (адрес по сути) неизвестен (в С).
в c#, например.ОК. Верю. Можешь выкинуть в offtopic.
Какой "этот"? Адрес строчки "111"?
во-первых, если класть эти константы в static-память, то известны.
во-вторых, почему switch должен в данном случае бегать по указателям, а не по значению?
Нет. Компилятору известно смещение относительно PC или в GOT (смотря какая архитектура/ABI). Абсолютный адрес станет известен в момент запуска.
> во-вторых, почему switch должен в данном случае бегать по указателям, а не по значению?
Патамучта такпредумоле К&Р и пафтарил строуструупп.
т.е. для тебе является догмой конкретная реализация?
Потому что значением "blablabla" является адрес. А строка - то что лежит по этому адресу.
Оставить комментарий
DiDiPi
Неконстантное выражение в switch Или в C# можно все , или UML должен генерить некомпилируемое