определения нелокального класса является определением, которое не определенно в другом теле класса или он не встроен в теле функции.
Так в основном вы можете сделать это:
#include <iostream>
struct NonLocal
{
friend std::ostream& operator<<(std::ostream& os, const NonLocal& l)
{
os << l.x;
return os;
}
private:
int x;
};
int main()
{
NonLocal nl;
std::cout << nl;
}
, но вы не можете сделать это:
#include <iostream>
int main()
{
struct Local
{
friend std::ostream& operator<<(std::ostream& os, const Local& l) // this will fail to compile
{
os << l.x;
return os;
}
private:
int x;
};
Local l;
std::cout << l;
}
От cppreference.com:
Класс декларации может появиться в области видимости пространства имен (в этом случае он определяет обычный класс), внутри другого определения класса (в котором , он определяет вложенный класс) и внутри тела функции, в , в каком случае он определяет локальный класс . Имя такого класса только существует в пределах области действия и не доступно снаружи.
- Локальный класс не может иметь статические члены
- функции члены локального класса не имеют никакой связи
- функции-члены локального класса должны быть определены полностью внутри тела класса
- Локальные классы, кроме (поскольку C++ 14) не может иметь шаблонов членов
- Локальные классы не могут иметь шаблоны друзей
- Локальный класс внутри функции (включая функцию-член) может обращаться к тем же именам, что и Доступ к закрывающей функции.
- локальные классы не могут быть использованы в качестве аргументов шаблона (до C++ 11)
[курсив мой]
Ваш вопрос непонятен и искажен. Ссылки не заменяют содержание. – Amit
Я думаю, что очень точный и автономный, ссылка не нужна для понимания вопроса. На самом деле, я получил ответ, который был у меня менее чем за 1 минуту. –
Ответы, которые вы получили, объясняют, что такое местный класс - это не то, о чем спрашивает ваш вопрос. Приятно, что у вас есть ответ, который вам нужен, но вопрос все еще искажен. – Amit