Подтвердить что ты не робот

Значение двойной скобки "[[foo()]] имя типа;" синтаксис в С++?

В в этой статье об избегании False Sharing представлен следующий код, скомпилированный для выравнивания:

// C++ (using C++0x alignment syntax)
template<typename T>
struct cache_line_storage {
   [[ align(CACHE_LINE_SIZE) ]] T data;
   char pad[ CACHE_LINE_SIZE > sizeof(T)
        ? CACHE_LINE_SIZE - sizeof(T)
        : 1 ];
};

В чем смысл строки 4? Я никогда раньше не видел этот двойной синтаксис.

4b9b3361

Ответ 1

Это attribute синтаксис спецификатора. Он был представлен как единый синтаксис для доступа к тем, что раньше были расширениями для компилятора (в настоящее время некоторые из них стандартизированы).

В этом случае код сообщает компилятору выровнять data с CACHE_LINE_SIZE байтами.