Почему ключевое слово ограничения не является частью С++?

Название говорит само за себя. Мне любопытно, почему ключевое слово ограничения не является частью С++? Я мало что знаю о С++, и я до сих пор не могу найти в Интернете ничего, что могло бы послужить причиной для блокировки этого. Кто-нибудь знает, какие ужасные вещи произойдут, если стандарт C++ будет использовать это ключевое слово так же, как это делает C? Он просто совсем не нужен?

Дополнительное пояснение: речь не идет об использовании, возможно, я не получу никакой пользы от этого ключевого слова за всю свою жизнь. Этот вопрос только из любопытства, так как рестрикт входит в состав C начиная с C99, то есть 15 лет.

Прочтите и это: меня интересуют технические причины, а не мнения типа "Просто не понравилось, недостаточно круто"


person Gábor Buella    schedule 28.03.2014    source источник
comment
Обратите внимание, что по крайней мере MSVC, gcc и компилятор Intel поддерживают restrict (или варианты, например __restrict) для c++, поэтому на практике это не так уж важно.   -  person Alexandre C.    schedule 29.03.2014
comment
Этот вопрос требует мнения о чем-то, что не является реальной проблемой, и, следовательно, это неподходящий вопрос для переполнения стека.   -  person Dialecticus    schedule 29.03.2014
comment
Мое предположение: им это просто не нравилось, и они думали, что у них есть идеальный достаточно умный компилятор, чтобы понять все это самостоятельно.   -  person Deduplicator    schedule 29.03.2014
comment
@Dialecticus Этот вопрос в основном задается по техническим причинам. Я не ожидаю ответов, например, потому что ограничивать глупо, я хотел бы ответов, что это противоречит тому и этому. Должен ли я изменить вопрос в соответствии с этим?   -  person Gábor Buella    schedule 29.03.2014
comment
Буэлла, вас может заинтересовать N3635 open- std.org/jtc1/sc22/wg21/docs/papers/2013/n3635.pdf и другие результаты гугления на сайте: www.open-std.org/jtc1/sc22/wg21/restrict   -  person osgx    schedule 29.03.2014
comment
@BuellaGábor Не могли бы вы указать какие-либо ссылки или хотя бы уточнить, что касается restrict и С++? Я не понимаю, о чем ваш вопрос...   -  person πάντα ῥεῖ    schedule 29.03.2014
comment
@πάνταῥεῖ en.wikipedia.org/wiki/Restrict   -  person Gábor Buella    schedule 29.03.2014
comment
Вопрос, вероятно, больше подходит для Programers.stackexchange.com   -  person mjhm    schedule 29.03.2014


Ответы (2)


Есть несколько проблем с определением «ограничения» в C++, некоторые из них перечислены в документе WG N3635: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013./n3635.pdf "К ограничивающей семантике для C++"

Некоторые возможные проблемы с ограничением в C++:

  • Ограничить членов класса и косвенность с помощью «этого указателя»
  • Передача ограничительных квалификаторов в функции, функторы, лямбда-выражения и шаблоны
  • Экранирование ограничивающих значений указателя внутри функций
  • Перекрывающиеся элементы массива, шаги

В документе также перечислены несколько компиляторов C++ с ограниченной «ограниченной» поддержкой C++.

В N3635 также есть интересная историческая заметка о невключении ограничения на C++:

Во время рассмотрения включения функций C99 в C ++ во время встречи в Мон-Тремблане было рассмотрено ограничение, но ожидалось бумажное предложение, хотя так и не поступило ....

Restrict — это функция C99, которая никогда не предназначалась для работы с абстракциями классов, и это может быть связано с тем, что указатели не распространены в C++. ... он был разработан для мелкозернистого сглаживания для C, но не очень хорошо разработан для сглаживания на основе типов в C++

person osgx    schedule 29.03.2014
comment
Спасибо, эта бумага - то, что я искал. Я просто понятия не имел, что мне нужно гуглить site:www.open-std.org/jtc1/sc22/wg21/ restrict. В следующий раз буду знать.. - person Gábor Buella; 29.03.2014
comment
Указатели не распространены в С++? Интересно, у них такое понятие... :-( - person einpoklum; 07.03.2016
comment
Я был бы согласен с идеей, что ограничение может применяться только к указателям аргументов функций, которые могут существовать только в стеке и могут ссылаться только на типы POD стандартной компоновки. Первое гм ограничение является новой категорией для C++, а вторая категория (стандартный макет POD) обычно не влияет на возможность использования ключевых слов языка. Так что, возможно, моя идея плоха. - person Omnifarious; 25.06.2018

Не умаляя ответа osgx, но есть несколько более современная статья N3998 Финкеля, Тонга, Каррута, Нельсона Вандевуда и Вонга от мая 2014 года:

На пути к ограничивающей семантике псевдонимов для C++

И еще более новый с 2018 года:

[[assert: std::disjoint(A,nA, B,nB)]]: утверждения контракта как альтернативное написание ' ограничить '

(Спасибо @MCCCS за указание на последнее.)

person einpoklum    schedule 07.03.2016