Domyslna wartośc parametru dla konstruktora

0

Kolega używa gcc a ja clang , po polaczeniu kodu wyszlo ze sie nie kompiluje na pewnej konstrukcji używanej przez kolegę.

Konstruktor z domyślnym parametrem nie che działać w clang
Jak to powinno być prawidłowo aby działał konstruktor bez parametru i z parametrem ? Rozwiązanie: Dwa konstruktory ?

clang: https://godbolt.org/z/dzhcshac3
gcc: https://godbolt.org/z/de1e1Ex8v

#include <spdlog/spdlog.h>

class cB {
    public: 
        int length;
        cB(int len);
};

cB::cB(int len = 1)
    : length(len)
{
    spdlog::info("cB::cB({})",len);
}

int main()
{
   cB test1; 
   cB test100(100); 
}
3

Domyślna wartość argumentu powinna być tylko przy deklaracji funkcji.

#include <spdlog/spdlog.h>

class cB {
    public: 
        int length;
        cB(int len = 1);
};

cB::cB(int len)
    : length(len)
{
    spdlog::info("cB::cB({})",len);
}

int main()
{
   cB test1; 
   cB test100(100); 
}

clang: https://godbolt.org/z/nY8KrbGWv
gcc: https://godbolt.org/z/rnM3eb34q

2

A tak przy okazji - zadeklaruj ten konstruktor jako "explicit" bo możesz się nieprzyjemnie zdziwić...

class cB {
    public: 
        explicit cB(int len = 1);
      // ...
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1