Здравствуйте, Аноним, Вы писали:
SWW>>>Все хорошо, только на фига здесь точки с запятой?
UGN>>Нравится мне так... Они мешают?
А>После тела функции — определенно.
А это... Никак не избавлюсь от этой привычки...
Кстати, а можно пункт Стандарта, где сказано, что эти ; лишние?
А>>После тела функции — определенно.
UGN>А это... Никак не избавлюсь от этой привычки...
UGN>Кстати, а можно пункт Стандарта, где сказано, что эти ; лишние?
В стандарте не написано, что они должны быть, следовательно их быть не должно. Вообще-то после описания класса или структуры ; тоже не ставится, после должен идти список объектов этого класса, заканчивающийся точкой с запятой. И только если этот список отсутствует, то точка с запятой оказывается после описания класса, т.е. это не прямое требование синтаксиса, а как бы косвенное.
Здравствуйте, UGN, Вы писали:
UGN>Здравствуйте, Аноним, Вы писали:
SWW>>>>Все хорошо, только на фига здесь точки с запятой?
UGN>>>Нравится мне так... Они мешают?
А>>После тела функции — определенно.
UGN>А это... Никак не избавлюсь от этой привычки...
UGN>Кстати, а можно пункт Стандарта, где сказано, что эти ; лишние?
Это зависит от того, где располагается твое тело функции.
Если это тело инлайновой функции, определнной внутри определения класса, то точку с запятой можно поставить, а можно и не ставить. Это сказано в фрагменте грамматики в пункте 9.2.
Если же это определение функции, располагающееся за пределами определения класса, то ставить точку с запятой после такого определения явно запрещено стандартом языка. Для этого надо внимательно рассмотреть фрагмент грамматики в пункте 7/1 и обязательно прочитать пункт 7/3.
Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>Это зависит от того, где располагается твое тело функции.
АТ>Если это тело инлайновой функции, определнной внутри определения класса, то точку с запятой можно поставить, а можно и не ставить. Это сказано в фрагменте грамматики в пункте 9.2.
Да, действительно там это указано. Спасибо.
АТ>Если же это определение функции, располагающееся за пределами определения класса, то ставить точку с запятой после такого определения явно запрещено стандартом языка. Для этого надо внимательно рассмотреть фрагмент грамматики в пункте 7/1 и обязательно прочитать пункт 7/3.
Имеется ли в виду пункт 7/1, где в грамматике указан function-definition без точки с запятой на конце?
Т.е. если не указано, значит строго нельзя? А если бы было можно ставить, то стояло бы "opt", как в классах? (9.2)
А вот 7/3, честно говоря, не понял
Там говорится о том, что в определении класса или перечисления нужно указывать имя?
Здравствуйте, UGN, Вы писали:
UGN>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>Это зависит от того, где располагается твое тело функции.
АТ>>Если это тело инлайновой функции, определнной внутри определения класса, то точку с запятой можно поставить, а можно и не ставить. Это сказано в фрагменте грамматики в пункте 9.2.
UGN>Да, действительно там это указано. Спасибо.
АТ>>Если же это определение функции, располагающееся за пределами определения класса, то ставить точку с запятой после такого определения явно запрещено стандартом языка. Для этого надо внимательно рассмотреть фрагмент грамматики в пункте 7/1 и обязательно прочитать пункт 7/3.
UGN>Имеется ли в виду пункт 7/1, где в грамматике указан function-definition без точки с запятой на конце?
Да. Сначала именно это.
UGN>Т.е. если не указано, значит строго нельзя?
Да, если грамматика не разрешает, то строго нельзя.
UGN>А если бы было можно ставить, то стояло бы "opt", как в классах? (9.2)
Не обязательно. Есть и другой потенциальный способ "протащить" точку с запятой туда. В частности — пустая декларация. Если бы С++ разрешал использование пустой декларации, то можно было бы ставить точку с запятой после определения функции (причем можно было бы ставить сколько угодно точек с запятой). В этом случае эта точка с запятой к самой функции никакого отношения не имела бы, а как бы представляла собой бы совершенно отдельную пустую декларацию, идущую сразу за телом функции.
И на первый взгляд из рассмотрения фрагмента грамматики в 7/1 может показаться, что язык разрешает пустую декларацию. А именно, обрати внимание на самое последнее правило — правило для simple-declaration. Simple-declaration завершается точкой с запятой и содержит две части, каждая из которых помечена как опциональная. Т.е. на превый взгляд можно опустить обе части и мы получим пустую декларацию.
UGN>А вот 7/3, честно говоря, не понял UGN>Там говорится о том, что в определении класса или перечисления нужно указывать имя? UGN>А где про точку с запятой?
А вот именно 7/3 и говорит, что в simple-declaration не могут отсутствовать обе части одновременно. Это означает, что в С++ не допускается пустая декларация.
Других способов легально "протащить" завершающую точку запятой в определение функции в С++ нет.
Некоторые компиляторы не ругаются на такое использование точки с запятой. Как правило это означает, что они не настаивают на соблюдении требований 7/3 и расценивают завершающую точку запятой как пустую декларацию, следующую сразу за определением функции.