Гипотетический, раньше-C++ 0x вопросы о понятиях

Apache StringUtils имеет несколько методов: leftPad , rightPad , center и repeat .

, Но обратите внимание на то, что —, поскольку другие упомянули и продемонстрировали в [1 112] этот ответ — String.format() и эти Formatter, классы в JDK являются более оптимальными вариантами. Используйте их по коду свободного городского населения.

12
задан GRB 30 April 2012 в 08:07
поделиться

1 ответ

Я использовал самый последний черновик C ++ 0x, N2914 (в котором все еще есть формулировки концепций) в качестве ссылки для следующего ответа.

1) Концепции похожи на интерфейсы в этом. Если ваш тип поддерживает концепцию, он также должен поддерживать все «базовые» концепции. Утверждение Википедии, которое вы цитируете, имеет смысл с точки зрения клиента типа - если он знает, что T удовлетворяет концепции Derived , то он также знает, что он удовлетворяет концепции ] База . С точки зрения автора шрифтов это, естественно, означает, что должны быть реализованы оба варианта. См. 14.10.3 / 2.

2) Да, концепция с членами typename может быть auto . Такие члены могут быть автоматически выведены, если они используются в определениях функциональных членов в той же концепции. Например, value_type для итератора может быть выведен как тип возвращаемого значения его оператора * . Однако, если член типа нигде не используется, он не будет выведен и, следовательно, не будет определен неявно. В вашем примере нет способа вывести SomeType :: Type для Dummy или Dummy1 , поскольку Type isn ' t используется другими членами концепции, поэтому ни один из классов не будет отображаться в концепции (и, фактически, ни один класс не может автоматически сопоставить его). См. 14.10.1.2/11 и 14.10.2.2/4.

3) Аксиомы были слабым местом спецификации, и они постоянно обновлялись, чтобы придать некоторый (больший) смысл. Незадолго до того, как концепции были извлечены из черновика, была статья , которая немного изменилась - прочтите ее и посмотрите, имеет ли она больше смысла для вас, или у вас все еще есть вопросы по ней.

Для ваших конкретном примере (с учетом синтаксической разницы), это будет означать, что компилятору будет разрешено считать выражение (a * 1) таким же, как (a * 2) , для назначение правила «как если бы» языка (т.е. компилятору разрешено выполнять любые оптимизации, которые он хочет, пока результат ведет себя так, как будто их не было). Однако,

11
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

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