Как реализованы С++-приведения?

С++ cast static_cast, const_cast, reinterpret_cast имеют шаблонный синтаксис, например.

long foo = 3; 
int bar = static_cast<int>(foo);

Я посмотрел в стандарте, и он говорит, что приведения - это выражения, а не шаблонные функции, как я думал.

Это заставило меня задуматься: под капотом эти листы просто шаблоны с привилегированным статусом, или они являются ключевыми словами, которые заимствуют синтаксис шаблона?

Ответы

Ответ 1

являются ли они ключевыми словами, которые заимствуют синтаксис шаблона?

Это. Каста реализуются по-разному в зависимости от контекста, в котором они используются - в общем, они не могут быть реализованы как функции. Например, static_cast иногда является только операцией с компиляцией, для этого не испускается код. Но в других случаях (в частности, при вызове конструкторов, литье в иерархии типов или преобразовании несовместимых с макетами примитивных типов) требуется операция выполнения.

Тем не менее, вы можете реализовать свои собственные функции, которые напоминают стандартный синтаксис синтаксиса (boost::lexical_cast делает это).