Параграф 4 [expr.cast] (в последнем проекте стандарта C ++, доступном на момент написания), который описывает поведение приведения в стиле C, говорит следующее:
Преобразования, выполняемые
- a
const_cast
, - a
static_cast
, - a
static_cast
, за которыми следует const_cast
, - a
reinterpret_cast
или - a
reinterpret_cast
с последующими const_cast
,
могут быть выполнены с использованием приведенной нотации явного типапреобразование.Применяются те же семантические ограничения и поведения, за исключением того, что при выполнении static_cast
в следующих ситуациях преобразование допустимо, даже если базовый класс недоступен:
- указатель на объект производногоТип класса или lvalue или rvalue производного типа класса могут быть явно преобразованы в указатель или ссылку на однозначный тип базового класса, соответственно;
- указатель на член производного типа класса может быть явно преобразован в указательчлену однозначного невиртуального типа базового класса;
- указатель на объект однозначного невиртуального типа базового класса, glvalue однозначного невиртуального типа базового класса или указатель на членоднозначного не виртуального типа базового класса может быть явно преобразован в указатель, ссылку или указатель на член производного типа класса, соответственно.
Если преобразование можно интерпретировать болеечем один из способов, перечисленных выше, интерпретация, котораяпоявляется первым в списке, используется, даже если приведение в результате этой интерпретации является плохо сформированным. Если преобразование можно интерпретировать более чем одним способом как static_cast
, за которым следует const_cast
, преобразование является некорректным .[...]
Мой вопрос заключается в том, как " преобразование можно интерпретировать более чем одним способом как static_cast
, за которым следует const_cast
"?
Спасибо.