Próbuję nowych funkcji C++ 11 i znalazłem problem. To jest mój kod:błąd na g ++ 4.8.2 na liście metoda-argument inicjalizacja domyślna
#include <iostream>
#include <list>
#include <string>
using namespace std;
class A {
public:
int f (list<string> a, list<string> b={})
{
cout << a.size() << endl;
cout << b.size() << endl; // This line!!!
return 0;
}
};
int main()
{
A a;
list<string> l{"hello","world"};
a.f(l);
return 0;
}
Egzekucja utknęła na "tej linii !!!" linia. Kontynuuję debugowanie i wygląda na to, że problem jest tutaj.
/** Returns the number of elements in the %list. */
size_type
size() const _GLIBCXX_NOEXCEPT
{ return std::distance(begin(), end()); }
skompilować mój program w ten sposób:
g++ -std=c++11 -ggdb3 -fPIC -o test TestlistInit.cpp
używam tej wersji g ++:
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
góry dzięki !!!
Mam ten sam problem w wersji 4.7.3, co ciekawe po prostu zastępuję 'list b = list ()' działa. Ale tak, wygląda na bug gcc. –
Barry
Zdecydowanie błąd. Otrzymujesz błąd segmentacji (http://coliru.stacked-crooked.com/a/b1764458721a56fc) po zwróceniu go z funkcji jako domyślny argument. I zobacz, co się dzieje [gdy lista zawiera elementy.] (Http://coliru.stacked-crooked.com/a/fa7a009908546074) – 0x499602D2
niesamowite, że takie podstawowe błędy są nadal w 4.8.2 ... – Walter