Почему в С++ 0x есть оператор sizeof?

Я видел, что @GMan реализовал версию sizeof... для вариативных шаблонов, который (насколько я могу судить) эквивалентен встроенному sizeof.... Разве это не противоречит второму принципу проектирования: предпочитать библиотеки к языковым расширениям?


person Motti    schedule 05.05.2010    source источник


Ответы (2)


Из шаблонов Variadic (редакция 3) (N2080= 06-0150), стр. 6:

Хотя это и не является строго обязательным (мы можем реализовать count без этой функции), проверка длины пакета параметров является обычной операцией, которая заслуживает простого синтаксиса. Кроме того, эта операция может стать необходимой для проверки типов, когда вариативные шаблоны объединяются с концептами; см. раздел 3.3.

(Раздел 3.3 говорит о понятиях, которые сейчас неуместны.)

person kennytm    schedule 05.05.2010
comment
sizeof... также можно одинаково хорошо применять к пакетам параметров шаблонов и функций. Так что sizeof...(T) и sizeof...(t) работают одинаково хорошо. Я полагаю, что решение на основе библиотеки будет работать либо с пакетами шаблонов, либо с пакетами параметров функций, но не с обоими. Потому что одно расширение создает последовательность типов, а другое — последовательность выражений. Может быть, написать его как template<size_t...> struct count;, а затем передать пакет как count<sizeof(T)...> может сработать. Поскольку sizeof может обрабатывать как типы, так и выражения, казалось бы, это работает, но это явно уродливее :) - person Johannes Schaub - litb; 09.05.2010

sizeof... это просто сахар, я думаю.

sizeof действительно является ядром языка, как и ..., и хотя функция countof может существовать, у нас уже есть зарезервированные sizeof и ..., поэтому мы могли бы также сделать так, чтобы было удобно получать подсчет.

Наоборот, если бы sizeof и ... не были зарезервированы, идея добавить такую ​​вещь, вероятно, потерпела бы неудачу, потому что новые ключевые слова, как правило, не одобряются. (Чем меньше, тем лучше.)

person GManNickG    schedule 05.05.2010