SORU
26 EYLÜL 2011, PAZARTESİ


String::c_str() artık boş C 11'de sonlandırıldı?

C 11 basic_string::c_str tanımlanmış olmak tam olarak aynı basic_string::data, hangi sırayla tanımlı olmak tam olarak aynı *(begin() n) *(&*begin() n) (0 <= n < size()).

Ben her zaman onun dize sonuna bir boş karakter olmasını gerektiren bir şey bulmak.

Bu c_str() artık boş sonlandırılmış bir dize üretmek için garantili anlamına mı geliyor?

CEVAP
26 EYLÜL 2011, PAZARTESİ


Dizeleri şimdi boş sonlandırılmış tamponlar DAHİLİ olarak kullanmak için gereklidir. operator[] (21.4.5)bu: tanım

Gerektirir:pos <= size().

Verir:pos < size(), başka türde bir nesne başvurusu varsa *(begin() pos) T değeri ile charT(); referans değeri değiştirilemez.

Geri c_str (21.4.7.1/1), operator[] açısından tanımlanmış olduğunu görüyoruz:

Verir:[0,size()] 16 *her p i == &operator[](i) böyle bir işaretçi p.

c_str data hem O olmak için gerekli(1), uygulanması etkin bir şekilde sonlandırılmış tamponlar kullanmak zorunda kalır.

Ayrıca, David Rodríguez - dribeas işaret açıklamalarda, dönüş değeri şartı da demek kullanabileceğiniz &operator[](0) eşanlamlı c_str(), sonlandırıcı boş karakter olmalı yalan aynı tampon (beri *(p size()) eşit olmalıdır charT()); bu da demek oluyor ki bile Terminatör başlatıldığını tembel, mümkün olmadığını gözlemlemek tampon Ara devlet.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MusicDeluxeTV

    MusicDeluxeT

    14 Mayıs 2010
  • talkandroid

    talkandroid

    27 Mayıs 2010
  • Xbox

    Xbox

    1 Kasım 2005

İLGİLİ SORU / CEVAPLAR