Код: Выделить всё
#include <iostream>
class first
{
public :
static const int GetINTs()
{
return 1;
}
static const int INT = 1;
};
class second
{
public:
static const int GetINTs()
{
return 2;
}
static const int INT = GetINTs();
};
class three
{
public:
static const int GetINTs()
{
return 3;
}
static const int INT;
};
const int three::INT = GetINTs();
int main()
{
std::cout << "first::GetINTs() = " << first::GetINTs() << "\n";
std::cout << "first::INT = " << first::INT << "\n\n";
std::cout << "second::GetINTs() = " << second::GetINTs() << "\n";
std::cout << "second::INT = " << second::INT << "\n\n"; // zero ?
std::cout << "three::GetINTs() = " << three::GetINTs() << "\n";
std::cout << "three::INT = " << three::INT << "\n\n"; // now 3 ?
int sw = 5;
switch(sw)
{
case first::INT: // no problem
std::cout << "first::INT selected \n";
break;
//case second::INT: // error C2051: case expression not constant
std::cout << "second::INT selected \n";
break;
//case three::INT: // error C2051: case expression not constant
std::cout << "three::INT selected \n";
break;
default :
std::cout << "default selected \n";
}
return 0;
}
first::GetINTs() = 1
first::INT = 1
second::GetINTs() = 2
second::INT = 0
three::GetINTs() = 3
three::INT = 3
default selected
Вопросы:
почему second::INT ноль выводит, а three::INT выводит "3" ?
почему case не работают - ведь, тип const int ? чего компилятору не хватает для полного счастья?
Необходимо именно switch применять.
компилятор VC 7.1
P.S. Есть-ли какой-нибудь способ на этапе компиляции получать уникальные значения типа int?