Знаковая/беззнаковая часть базового типа или квалификатор

Вики-страница утверждала, что квалификаторы в C++ — это const и volatile.

В этом ответе указано, что unsigned, unsigned и short и т. д. также являются квалификаторами. Хотя в вопросе упоминалось, что речь идет о C, на Вики-странице об этом также не говорится. на стороне С. Для C квалификаторы const, volatile, restrict и _Atomic.

И расширяющееся окно сообщения тега qualifier переполнения стека говорит

Квалификатор добавляет дополнительное «качество», например указание волатильности или постоянства переменной.

«Добавить дополнительное качество», из цитаты, singed/unsigned кажется удовлетворяющим условию, оно добавило ограниченное дополнительное качество к целому числу, так что оно может содержать только положительное число или отрицательное.

Я немного запутался в этом вопросе на данный момент. Для C и C++ signed, unsigned и short и т. д. считаются частью базового типа или квалификатором типа< /сильный>? И, пожалуйста, уточните, отличаются ли правила в C и C++.


person SLN    schedule 20.01.2018    source источник
comment
Для каждого типа, кроме ссылки и функции, система типов поддерживает три дополнительные версии этого типа с указанием cv (const, volatile и const volatile). См.: en.cppreference.com/w/cpp/language/type и en.cppreference.com/w/cpp/language/types Также это, вероятно, отличается для C и C++.   -  person Richard Critten    schedule 20.01.2018
comment
signed и unsigned нельзя использовать ни с одним типом. C11 _Generic по типу является переключателем. Он отбрасывает const и volatile квалификаторы, но не знаки. Но действительно ли это имеет значение? Вы можете проверить стандарт, но даже тогда это просто игра слов.   -  person StaceyGirl    schedule 20.01.2018
comment
@RichardCritten кажется, вы указали 2 одинаковых URL-адреса ресурса, я думаю, вы имеете в виду en.cppreference.com/ w/c/язык/тип   -  person SLN    schedule 20.01.2018
comment
@SLN исправлено, спасибо, теперь должно быть написано .../type и .../types   -  person Richard Critten    schedule 20.01.2018
comment
Квалификатор не меняет возможных значений типа. Элементы int и unsigned int перекрываются лишь частично.   -  person molbdnilo    schedule 20.01.2018
comment
singed для очень горячих переменных.   -  person Eljay    schedule 20.01.2018
comment
@Eljay, что такое горячие переменные?   -  person SLN    schedule 20.01.2018
comment
Несколько важно различать квалификатор, определенный стандартом C++, и квалификатор, определенный в словаре. В некоторых текстах квалификатор используется как синоним спецификатора, что не соответствует стандартному значению.   -  person molbdnilo    schedule 20.01.2018
comment
@SLN • подписано   -  person Eljay    schedule 20.01.2018
comment
Графическое представление вселенной типов в C++ и их классификации: howardhinnant.github.io/TypeHiearchy. pdf   -  person Howard Hinnant    schedule 20.01.2018
comment
@HowardHinnant, спасибо, это хорошая иллюстрация!   -  person SLN    schedule 20.01.2018


Ответы (2)


И в C, и в C++ signed, unsigned, short и long являются описателями типа. Их можно сочетать с int даже неявно. signed и unsigned также можно комбинировать с char.

Напротив, квалификаторы могут применяться практически к любому типу. (типа int& const нет, только int const&)

person MSalters    schedule 20.01.2018

Согласно стандарту C11 (§6.7.3) , используются квалификаторы типа const, restrict, volatile и _Atomic. signed и unsigned подпадают под тип описатели (§6.7.2).

person Kninnug    schedule 20.01.2018