X Tutup
The Wayback Machine - https://web.archive.org/web/20220513180346/https://ru.cppreference.com/w/cpp/language/attributes
Пространства имён
Варианты
Действия

последовательность спецификаторов атрибутов(начиная с C++11)

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление потоком
Операторы условного выполнения
if
Операторы итераций (циклы)
Операторы переходов
Функции
Объявление функции
Выражение лямбда-функции
Спецификатор inline
Спецификации динамических исключений (до C++20)
Спецификатор noexcept (C++11)
Исключения
Пространства имён
Типы
Спецификаторы
decltype (C++11)
auto (C++11)
alignas (C++11)
Спецификаторы длительности хранения
Инициализация
Выражения
Альтернативные представления
Литералы
Логические - Целочисленные - С плавающей запятой
Символьные - Строковые - nullptr (C++11)
Определённые пользователем (C++11)
Утилиты
Атрибуты (C++11)
Типы
Объявление typedef
Объявление псевдонима типа (C++11)
Приведения
Неявные преобразования - Явные преобразования
static_cast - dynamic_cast
const_cast - reinterpret_cast
Выделение памяти
Классы
Свойства функции, зависящие от класса
explicit (C++11)
static
Специальные функции-элементы
Шаблоны
Разное
 

Представляет зависящие от реализации атрибуты для типов, объектов, кода и т.д.

[[attr]] [[attr1, attr2, attr3(args)]] [[namespace::attr(args)]] alignas_specifier

[править] Объяснение

Атрибуты предоставляют единый стандартный синтаксис для реализации определенных языковых расширений, таких как расширение языка __attribute__((...)) в GNU и IBM, расширение Microsoft __declspec(), и т.д.
Оригинал:
Attributes provide the unified standard syntax for implementation-defined language extensions, such as the GNU and IBM language extensions __attribute__((...)), Microsoft extension __declspec(), etc.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Атрибут может использоваться почти всюду в C++ программах, и может быть применён практически ко всему: к типам, переменным, функциям, именам, блокам кода, к целым единицам трансляции, хотя каждый конкретный атрибут действует только там, где разрешено имплементацией: [[probably(true)]] может быть использовано только с if, и не может с объявлением класса. [[omp::parallel()]] может быть применено к блоку кода или for цикла, но не к типу int, и т.д.
Оригинал:
An attribute can be used almost everywhere in the C++ program, and can be applied to almost everything: to types, to variables, to functions, to names, to code blocks, to entire translation units, although each particular attribute is only valid where it is permitted by the implementation: [[probably(true)]] can only be used with an if, and not with an class declaration. [[omp::parallel()]] can apply to a code block or to a for loop, but not to the type int, etc.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
В декларации, атрибуты могут появляться как до, так и непосредственно после имени лица, которые объявлены, и в этом случае они сочетаются. В большинстве других ситуаций, атрибуты применяются к предыдущему непосредственно лицом.
Оригинал:
In declarations, attributes may appear both before and directly after the name of the entity that is declared, in which case they are combined. In most other situations, attributes apply to the directly preceding entity.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
alignas_specifier является частью последовательности спецификаторов атрибута, хотя она имеет другой синтаксис. Может показаться, где [[...]] атрибуты появляются и может смешиваться с ними (при условии, что используется там, где alignas разрешено)
Оригинал:
alignas_specifier is a part of the attribute specifier sequence, although it has different syntax. It may appear where the [[...]] attributes appear and may mix with them (provided it is used where alignas is permitted)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Стандартные атрибуты

Только следующие два атрибута определены в стандарте С + +. Все остальные атрибуты конкретной реализации.
Оригинал:
Only the following two attributes are defined by the C++ standard. All other attributes are implementation-specific.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[[noreturn]]
Указывает, что функция не возвращает.
Этот атрибут применяется функционировать только объявления. Поведение неопределено, если функция с этим атрибутом фактически возвращает.
The следующие стандартные функции имеют этот атрибут: std::_Exit, std::abort, std::exit, std::quick_exit, std::unexpected, std::terminate, std::rethrow_exception, std::throw_with_nested, std::rethrow_nested
Оригинал:
Indicates that the function does not return.
This attribute applies to function declarations only. The behavior is undefined if the function with this attribute actually returns.
The following standard functions have this attribute: std::_Exit, std::abort, std::exit, std::quick_exit, std::unexpected, std::terminate, std::rethrow_exception, std::throw_with_nested, std::rethrow_nested
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[[carries_dependency]]
Указывает, что цепочку зависимостей в релиз-потребляют std::memory_order распространяется в и из функции, которая позволяет компилятору, чтобы пропустить ненужные памяти забор instructions.
This атрибут может появиться в двух случаях:

1) он может обратиться к параметру декларации функции или лямбда-выражения, в этом случае это означает, что инициализация параметра несет в зависимости именующее к RValue преобразования, что object.

2) может обратиться в объявлении функции в целом, в этом случае он указывает, что возвращаемое значение несет в зависимость к оценке выражения вызова функции .
Оригинал:
Indicates that dependency chain in release-consume std::memory_order propagates in and out of the function, which allows the compiler to skip unnecessary memory fence instructions.
This attribute may appear in two situations:

1) it may apply to the parameter declarations of a function or lambda-expressions, in which case it indicates that initialization of the parameter carries dependency into lvalue-to-rvalue conversion of that object.

2) It may apply to the function declaration as a whole, in which case it indicates that the return value carries dependency to the evaluation of the function call expression.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

X Tutup