Константные свободные (и статические) функции
От: Went  
Дата: 18.08.15 13:23
Оценка:
Здрасте. Почему обычную глобальную функцию нельзя объявить как const? Вроде бы все логично — это будет "чистая" свободная функция, которая гарантированно не имеет сторонних эффектов кроме эффекта на mutable глобальные члены и на аргументы, переданные как не-константы. Я понимаю, нового функционала это в язык не добавит, но поведение вполне симметричное.
Re: Константные свободные (и статические) функции
От: Хреннос  
Дата: 18.08.15 14:47
Оценка:
Здравствуйте, Went, Вы писали:

W>Здрасте. Почему обычную глобальную функцию нельзя объявить как const?

Потому что это бессмысленно.
Если она не меняет своих аргументов — их все можно объявить const и горя не знать.
Re[2]: Константные свободные (и статические) функции
От: Went  
Дата: 18.08.15 15:31
Оценка:
Здравствуйте, Хреннос, Вы писали:
Х>Если она не меняет своих аргументов — их все можно объявить const и горя не знать.
Вы не дочитали мое сообщение. Она может менять свои аргументы, если они не const. Она не может менять глобальные переменные и вызывать не-константные функции. Тут одна проблема — перейти на такой синтаксис помешает то, что уже все стандартные функции объявлены как не-конст, и придется перелопатить немало существующего кода, чтобы навести тут порядок.
Re: Константные свободные (и статические) функции
От: uzhas Ниоткуда  
Дата: 18.08.15 15:47
Оценка: 2 (1)
Здравствуйте, Went, Вы писали:

W>Здрасте. Почему обычную глобальную функцию нельзя объявить как const? Вроде бы все логично — это будет "чистая" свободная функция, которая гарантированно не имеет сторонних эффектов кроме эффекта на mutable глобальные члены и на аргументы, переданные как не-константы. Я понимаю, нового функционала это в язык не добавит, но поведение вполне симметричное.


нет обратной совместимости
вдобавок, как задать метод класса константным и по отношению к данным класса и по отношению к глобальным переменным? все же это чуток разные консты
далее, нужно продумать перегрузку (допускать и каким образом; или не допускать), продумать ABI
Re: Константные свободные (и статические) функции
От: Кодт Россия  
Дата: 18.08.15 16:41
Оценка:
Здравствуйте, Went, Вы писали:

W>Здрасте. Почему обычную глобальную функцию нельзя объявить как const? Вроде бы все логично — это будет "чистая" свободная функция, которая гарантированно не имеет сторонних эффектов кроме эффекта на mutable глобальные члены и на аргументы, переданные как не-константы. Я понимаю, нового функционала это в язык не добавит, но поведение вполне симметричное.


constexpr ?
Перекуём баги на фичи!
Re: Константные свободные (и статические) функции
От: watchmaker  
Дата: 18.08.15 17:32
Оценка: 12 (3)
Здравствуйте, Went, Вы писали:

W>Почему обычную глобальную функцию нельзя объявить как const?

В gcc, icc, clang уже поддержаны атрибуты pure и const для функций. У тебя, кстати говоря, в тексте и заголовке присутствуют некоторые противоречия в терминологии, функции то называются «константными», то «чистыми», хотя это разные свойства. Но в любом случае, процесс переноса этих атрибутов из расширений в стандарт идёт — смотри обсуждение n3744.
Re[2]: Константные свободные (и статические) функции
От: Went  
Дата: 18.08.15 19:51
Оценка:
Здравствуйте, uzhas, Вы писали:

U>нет обратной совместимости

Угу. Не получится вызывать старые фактически константные функции из новых.

U>вдобавок, как задать метод класса константным и по отношению к данным класса и по отношению к глобальным переменным? все же это чуток разные консты

Да. Разные.

U>далее, нужно продумать перегрузку (допускать и каким образом; или не допускать), продумать ABI

Перегрузку не допускать (не имеет смысла), при линковке на константность внимания не обращать. Возможно, по началу будет достаточно сделать ворнинг на вызов неконст функций из конст, много легаси — функций, которые не помечены как конст.
Re[2]: Константные свободные (и статические) функции
От: Went  
Дата: 18.08.15 19:52
Оценка:
Здравствуйте, Кодт, Вы писали:
К>constexpr ?
Нет. У constexpr много более жесткие требования.
Re[2]: Константные свободные (и статические) функции
От: Went  
Дата: 18.08.15 19:54
Оценка:
Здравствуйте, watchmaker, Вы писали:
W> У тебя, кстати говоря, в тексте и заголовке присутствуют некоторые противоречия в терминологии, функции то называются «константными», то «чистыми», хотя это разные свойства.
Ага. Поторопился.

W>В gcc, icc, clang уже поддержаны атрибуты pure и const для функций.

W>Но в любом случае, процесс переноса этих атрибутов из расширений в стандарт идёт — смотри обсуждение n3744.
Интересно, пасиба!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.