Необязательный аргумент в функции

Буквально недавно пересел с игры python на с++, пока все нормально, но никак не могу понять, как мне сделать так чтобы, если аргумент в функцию не передавали, он имел "Никакой" тип, как None в python. Пример: есть класс Dog с конструктором

class Dog
{
public:
    std::string name;
    std::string color;
    std::vector<Dog> parents;

    Dog(std::string name, std::string color, std::vector<Dog> parents){
        this -> name = name;
        this -> color = color;
        this -> parents = parents;
    };
}

Если у Dog'a нет "родителей" я бы в python просто присвоил стандартное значение parents = None (спасибо динамической типизации) Пример на python:

class Dog:
def __init__(self, name, color, parents = None):
    self.name = name
    self.color = color
    self.parents = parents

Ответы (2 шт):

Автор решения: Code Is my life

Пока писал вопрос, понял как это можно сделать, лол. Всего лишь написать

Dog(std::string name, std::string color, std::vector<Dog> parents = {});

т.е присвоить пустой вектор по умолчанию, но теперь, если будете обращаться к вектору parents, а точнее к тому, что в нем находится, нужно проверять, пустой ли вектор или нет иначе можно случайно обратиться к несуществующим "родителям"

→ Ссылка
Автор решения: Alex Titov

Ну, если у собачки либо 0, либо 2 родителя, то пустой массив нормально. Если надо все-таки сделать отдельные поля для папы-мамы, то "в качестве None" применяется std::optional.

З.Ы. В C++ для инициализации членов класса в конструкторе обычно используют список инициализации, т.е. : ПолеКласса1(Параметр1), ПолеКласса2(Параметр2), который идет между круглой скобкой объявления конструктора и фигурной скобкой. Так что часто в самом конструкторе остаются только "пустые" фигурные скобки.

→ Ссылка