Значение двойной скобки "[[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?
Я никогда раньше не видел этот двойной синтаксис.
Ответы
Ответ 1
Это attribute синтаксис спецификатора. Он был представлен как единый синтаксис для доступа к тем, что раньше были расширениями для компилятора (в настоящее время некоторые из них стандартизированы).
В этом случае код сообщает компилятору выровнять data
с CACHE_LINE_SIZE
байтами.