Czy std:: string zawsze będzie zakończony znakiem null W C++11?
Herb Sutter w swoim poście z 2008 roku stwierdza, co następuje:]}
Istnieje aktywna propozycja, aby zaostrzyć to w C++0x i wymagać zakończenia null i ewentualnie zakazać implementacji copy-on-write, z powodów związanych z współbieżnością. Oto artykuł: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html . Myślę, że jedna lub obie propozycje zawarte w tym dokumencie prawdopodobnie zostaną przyjęte, ale zobaczymy na następnym posiedzeniu lub dwa.
Wiem, że C++11 gwarantuje teraz, że zawartość std::string zostanie zapisana w sposób ciągły, ale czy przyjęli powyższe w ostatecznym szkicu?
Czy teraz będzie bezpiecznie używać czegoś takiego jak &str[0]
?
1 answers
Tak. W C++0x FDIS 21.4.7.1 / 1, std::basic_string::c_str()
musi zwracać
Wskaźnik
p
taki, żep + i == &operator[](i)
dla każdegoi
w[0,size()]
.
Oznacza to, że dany łańcuch s
, Wskaźnik zwracany przez s.c_str()
musi być taki sam jak adres początkowego znaku w łańcuchu (&s[0]
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-20 20:30:25