Aşağıdaki örnek kodu vardır:Neden clang ++ sadece bir foo nesnesini yok eder?
I çınlama ++ -std = C++ 11 test.cc ile derlemek#include <iostream>
using namespace std;
struct foo {
foo() { cout << "foo constructed.\n"; }
~foo() { cout << "foo destroyed.\n"; }
};
struct bar {
bar(foo t=foo{}) { }
};
int main(int argc, char **argv) {
bar X[2]{};
return 0;
}
, program aşağıdaki çıktı üretir:
foo constructed.
foo constructed.
foo destroyed.
ama beklenen ek bir "foo yok etti." iki "foo inşası" arasında. çizgiler. Neden sadece bir foo yok edildi? Bu argo 3.5.1 yanı sıra 3.6.0 ile olur.
GCC 4.9 çıkışları foo yapılandırılmıştır. foo yok edildi. foo inşa edildi. foo destroyed.' Clang 3.5 ve 3.6 sonuçlarınızı yeniden üretir. Sanırım argoda bir hata var (clang ile libstdC++ kullanarak hatalı sonuçları hala üretiyor, bu yüzden onun standart bir kütüphane sorunu olduğunu düşünmüyorum). – Cornstalks
"\ n" yerine "endl" yi deneyin. – emlai
Clang'ın hangi sürümü? Neden kimse @ ~! #ing versiyon numarasını yazmıyor? –