Здравствуйте, CrystaX, Вы писали:
CX>Здравствуйте, Dmi_3, Вы писали:
D_>>Если двоеточием разделены выражения имеющие разный тип то каков тип результата и когда такое допустимо?
CX>А такое недопустимо. Типы выражений должны быть одинаковы или приводимыми один к другому.
Точнее тип только одного из них должен быть однозначно приводим к другому. Кроме того, допускаются кострукции вида:
a ? b: throw c; // a приводимо к bool, b - произвольного типа (throw expression имеет тип void).
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, Dmi_3, Вы писали:
D_>Если двоеточием разделены выражения имеющие разный тип то каков тип результата и когда такое допустимо? Как преобразуется нОль слева и нУль справа?
// a simple type wrappertemplate< class T > struct type2type {};
// convert an expression of type T to an
// expression of type type2type<T>template< class T >
type2type< T > encode_type( T const & t )
{
return type2type< T >();
}
// convertible to type2type<T> for any Tstruct any_type
{
template< class T >
operator type2type< T > () const
{
return type2type< T >();
}
};
// convert an expression of type T to an
// expression of type type2type<T> without
// evaluating the expression#define ENCODED_TYPEOF( container ) \
( true ? any_type() : encode_type( container ) )
D_>Вопрос почему печатается A. Чем он лучше B ? (MSVC 7.1)
Этот код компилироваться не должен. Я уже писал: "тип только одного из выражений должен быть однозначно приводим к другому". У тебя A приводится к B, а B к A. Нужно убрать одно из преобразвоний.
The last good thing written in C was Franz Schubert's Symphony No. 9.