Я знаю, что мы не можем объявить переменную-член static
внутри локального класса... но причина этого не ясна.
Итак, пожалуйста, кто-нибудь может объяснить это?
Кроме того, почему мы не можем получить доступ к переменной, отличной от static
, определенной внутри функции, в которой был определен локальный класс, непосредственно в функциях-членах локального класса?
В приведенном ниже коде:
int main(int argc, char *argv[])
{
static size_t staticValue = 0;
class Local
{
int d_argc; // non-static data members OK
public:
enum // enums OK
{
value = 5
};
Local(int argc) // constructors and member functions OK
: // in-class implementation required
d_argc(argc)
{
// global data: accessible
cout << "Local constructor\n";
// static function variables: accessible
staticValue += 5;
}
static void hello() // static member functions: OK
{
cout << "hello world\n";
}
};
Local::hello(); // call Local static member
Local loc(argc); // define object of a local class.
return 0;
}
Статическая переменная staticValue
доступна напрямую, в то время как, с другой стороны, аргумент argc
из main
не доступен....