uświadomieniu sobie następujące kompiluje GCC 4.7:Czy mogę przypisać 0 do shared_ptr? Czemu?
#include <memory>
int main() {
std::shared_ptr<int> p;
p = 0;
}
Jednakże, nie ma zadanie operatora z int
lub int*
i nie ma bezpośredniej konstruktor albo int
lub int*
obu. Jest konstruktor od int*
, ale ten jest wyraźny. Sprawdziłem implementację standardowej biblioteki, a konstruktor jest rzeczywiście wyraźny i nie widać żadnych rybackich operatorów przypisania.
Czy program jest rzeczywiście dobrze sformułowany, czy GCC jest ze mną w kontakcie?
'0' jest specjalnym dosłownym, zamienia na' nullptr_t' – Abyx
@LucDanton, ponieważ g ++ jest bardzo inteligentny i konwertuje '42-42' na' 0'. To samo dzieje się (zdarzało się?) W Clang, IIRC, wspomniano o nim na GN2012 – Abyx
@Abyx Tęskniłeś za punktem - "0" nie ma specjalnego traktowania jako literału w tym języku. –