Пространства имён
Варианты
Действия

attribute specifier sequence(начиная с C++11)

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

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Представляет реализацию определенных атрибутов для типов, объектов, код и т.д.
Оригинал:
Introduces implementation-defined attributes for types, objects, code, etc.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[[attr]] [[attr1, attr2, attr3(args)]] [[namespace::attr(args)]] alignas_specifier

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

Атрибуты предоставляют единый стандартный синтаксис для реализации определенных языковых расширений, таких как GNU и расширения IBM языке __attribute__((...)), 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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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