Re: Константа класса CFoo
От: Шахтер Интернет  
Дата: 26.10.03 20:17
Оценка: 12 (2)
Текущий стандарт C++ не допускает явной инициализации констант плавающего типа в объявлении класса. Не понимаю почему.
Надеюсь, что это будет исправлено. А пока можно делать так .

/* main.cpp */

#include <iostream>

using namespace std;

/* struct Test */

struct Test
{
static const struct { operator double() const { return 3.14159; } } pi;
};

/* main() */

int main()
{
cout << "Test::pi=" << Test::pi << endl ;

return 0;
}

Фрагмент main.asm (VC++ 7.1)

; 18 : cout << "Test::pi=" << Test::pi << endl ;

fld QWORD PTR __real@400921f9f01b866e
push esi
sub esp, 8
fstp QWORD PTR [esp]
push OFFSET FLAT:??_C@_09IICHILHK@Test?3?3pi?$DN?$AA@
push OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
add esp, 8
mov ecx, eax
call ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z ; std::basic_ostream<char,std::char_traits<char> >::operator<<
mov esi, eax
push 10 ; 0000000aH
mov ecx, esi
call ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z ; std::basic_ostream<char,std::char_traits<char> >::put
mov ecx, esi
call ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ ; std::basic_ostream<char,std::char_traits<char> >::flush
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.