Традиционный ООП имеет тенденцию определять понятие «объект» как «полиморфный объект», который несет методы и данные и может ссылаться на другие объекты на алгоритмы.
Определение объекта на С ++ - в сущности - «любая вещь занимает пространство, чтобы сохранить состояние». Это приводит к основному отличию в том, что «объекты» C++ имеют «поведение ценности» и что «методы» не обязательно являются членами, а объекту необязательно нужно поддерживать полиморфизм во время выполнения.
Программа C++, соответствующая традиционному определению ООП, заканчивается классами, на которые ссылаются (умные) - (базовые) - (указатели | ссылки), используя механизм косвенности в качестве ключа для разрешения полиморфизма во время выполнения.
Современный C++ использует объект как имеющий семантику с копией или перемещением по значению, и имеет тенденцию обращаться к полиморфизму во время компиляции с шаблонами и универсальными алгоритмами и типами.
Эти две вещи не являются одними из других, но C++ намеренно объединяет их обоих, что уменьшает определение «объекта» традиционного ООП (экземпляр класса, на который нужно ссылаться), является -in факт - отсекая половину возможностей и возможностей C++.
О лямбдах, это строгий смысл они выражения (сам не объекты) возвращающееся анонимных типизированных объекты.
Так говорят, что они объекты неприлично: a+b
это не сам объект: он производит объект (результат выражения).То же самое для [](){}
: он сам не является объектом: он производит объект, вы можете даже магазин, как в
auto fn = [](){}; //create a lambda and assign to fn.
fn(); //just calls it
типа п-то вроде
class lambda_uniquename
{
public:
void operator()()
{}
};
объект, здесь, не является классом lambda
, но переменная fn
.
'int x;' является 'x' экземпляром класса? – Pubby
@Pubby, но мой вопрос: что такое объект? Какое определение существует для этого слова в мире программирования и каковы последствия в определениях C++? Для того, что я знаю, int - это тип из std :: int, поэтому он является классом, поэтому x в этом случае является меткой для объекта, но я еще не определил, что такое объект. – user2269624
Существует не такой класс, как 'std :: int'. –