struct SchoolInt
{
int i;
operator const int&() const { return i; }
operator int&() { return i; }
// other int operations like ++ etcstruct SIA
{
SchoolInt& h;
const int& x;
mutable bool not_assigned_yet;
template<class U> operator U() const
{
// Looks like you wrote if( a = b ) instead of if( a == b ).
// If you really want to assign inside if-condition, do if( int(a = b) ).
BOOST_STATIC_ASSERT(( ! boost::is_same< U, bool >::value ));
not_assigned_yet=false;
return h.i=x;
}
~SIA() { if (not_assigned_yet) h.i=x; }
};
template<class RHS>
SIA operator=(const RHS& x)
{
// Looks like you wrote int_a = bool_b.
// SchoolInt is strict, please cast explicitly: int_a = (int)bool_b.
BOOST_STATIC_ASSERT(( boost::is_same< RHS, int >::value ));
SIA ret = {*this, x, true};
return ret;
}
};
Проверка:
int main()
{
SchoolInt i = { 5 };
std::cout << i << std::endl;
i = 14; // compiles
std::cout << i << std::endl;
double y = i = 13; // compiles
std::cout << i << " y=" << y << std::endl;
//bool z = int(i = 12); // compilesbool z = i = 12; // doesn't compile
std::cout << i << " z=" << z << std::endl;
if ( int x = i = 11 ) // compiles
std::cout << i << " x=" << x << std::endl;
//if ( bool w = int(i = 10) ) // compilesif ( bool w = i = 10 ) // doesn't compile
std::cout << i << " w=" << w << std::endl;
//if ( int(i = 9) ) // compilesif ( i = 9 ) // doesn't compile
std::cout << i << std::endl;
//if ( int(i = int(!0) ) ) // compilesif ( i =! 0 ) // doesn't compile
std::cout << i << std::endl;
}
Так что вы хотели сказать? Что лучше С++ чем С использовать?
Пример ваш прозрачный, ничего страшного/злого/непонятного я не обнаружил.
Есть стандарты и жеские правила оформления кода, в примере они проигнорированы и конечно создается впечатление что работает что то не так, например оператор = а уж темболее =! вообще разве уместно писать в блоке if ()? Беглый взгляд человека, который будет искать ошибку в мегобайтах кода просто упустит вашу хитрую мысль.
Оператор же реализован для (int) темплейта а пытаются ему подмешать (bool) именно подмешать, из-за того что код оформлен позорно!
Здравствуйте, sof.bix, Вы писали:
SB>Здравствуйте, jazzer, Вы писали:
SB>Так что вы хотели сказать? Что лучше С++ чем С использовать?
Этот код не в вакууме, он создан как ответ на то, что по ссылке. Прочитайте ее, пожалуйста.
Если так уж лень читать, суть в том, что студенты/школьники, только-только приступившие к изучению языка, делают глупые ошибки (типа а=!0) и потом не могут их найти, потому что все замечательно компилируется, просто работает неправильно. У меня же оно просто не компилируется, т.е. такие ошибки не пройдут дальше компилятора.
ЗЫ А еще сегодня пятница
ЗЗЫ А еще там смайлик в сабже есть, он обычно обозначает шутку или что-то в этом роде.
SB>>Здравствуйте, jazzer, Вы писали:
SB>>Так что вы хотели сказать? Что лучше С++ чем С использовать? J>Этот код не в вакууме, он создан как ответ на то, что по ссылке. Прочитайте ее, пожалуйста. J>Если так уж лень читать, суть в том, что студенты/школьники, только-только приступившие к изучению языка, делают глупые ошибки (типа а=!0) и потом не могут их найти, потому что все замечательно компилируется, просто работает неправильно. У меня же оно просто не компилируется, т.е. такие ошибки не пройдут дальше компилятора.
J>ЗЫ А еще сегодня пятница J>ЗЗЫ А еще там смайлик в сабже есть, он обычно обозначает шутку или что-то в этом роде.
Дошутишься пятничник)) Доброе, топик читал, только он непонятный, вот почитал к нему коментарии в дереве и понял к чему вы клоуните))
Здравствуйте, sof.bix, Вы писали:
SB>Дошутишься пятничник)) Доброе, топик читал, только он непонятный, вот почитал к нему коментарии в дереве и понял к чему вы клоуните))
Здравствуйте, sof.bix, Вы писали:
SB>Здравствуйте, jazzer, Вы писали:
SB>Так что вы хотели сказать? Что лучше С++ чем С использовать?
SB>Пример ваш прозрачный, ничего страшного/злого/непонятного я не обнаружил. SB>Есть стандарты и жеские правила оформления кода
Простите за оффтоп...
но вот опечатка "жеские".
Что вы имели в виду?
жесТкие или жеНские ? Спрашиваю, ибо поведение некоторых участников эпической дискуссии наводит на мысли...
Здравствуйте, blackhearted, Вы писали:
B>но вот опечатка "жеские". B>Что вы имели в виду? B>жесТкие или жеНские ? Спрашиваю, ибо поведение некоторых участников эпической дискуссии наводит на мысли...
жесТкие
Какой вы внимательный, обычно люди чтают первую и последнюю букву а вы прям в серединку угодили, и мысли наверное навелись интересные) тяпничные))