SORU
14 Kasım 2012, ÇARŞAMBA


Neden stringstream >> hedef değer hatası değiştirmek?

Stroustrup gelen TC PL, 3rd Edition, Bölüm 21.3.3:

Eğer biz denemek okuma içine bir değişken v ve işlem başarısız olur, değeri v olmalı değişmeden (değişmeden eğer v Bir tür tarafından ele ıstream veya başka üye fonksiyonlar).

Aşağıdaki örnek, yukarıdaki alıntı çeliştiği görülüyor. Yukarıdaki alıntı dayanarak, v değeri değişmeden -- kalmasını bekliyordum ama sıfırlanmış olur. Bu bariz çelişkili davranışın açıklaması nedir?

#include <iostream>
#include <sstream>

int main( )
{
    std::stringstream  ss;

    ss  << "The quick brown fox.";

    int  v = 123;

    std::cout << "Before: " << v << "\n";

    if( ss >> v )
    {
        std::cout << "Strange -- was successful at reading a word into an int!\n";
    }

    std::cout << "After: " << v << "\n";

    if( ss.rdstate() & std::stringstream::eofbit  ) std::cout << "state: eofbit\n";
    if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n";
    if( ss.rdstate() & std::stringstream::badbit  ) std::cout << "state: badbit\n";

    return 1;
}

Kullanarak aldığım çıktı-w64-mingw32-g x86_64 .exe (rubenvb-4.7.2-release) 4.7.2

Before: 123
After: 0
state: failbit

Teşekkürler.

CEVAP
14 Kasım 2012, ÇARŞAMBA


this reference:

Çıkarma başarısız örneğin, eğer bir harf bir rakam beklenen girilmemişse), değeri değiştirilmeden bırakılır ve failbit ayarlanmışsa (C 11 kadar)

Eğer çıkarma başarısız olursa, sıfır değeri yazılır ve failbit ayarlanmışsa. Eğer sonuçlar çıkarma değeri çok büyük ya da çok küçük uyum değeri, std::numeric_limits::max() veya std::numeric_limits::min() yazılı ve failbit bayrağı ayarlanmış. (C 11'den beri)

Derleyici davranış değişiklikleri hangi modu, C 11 derleme gibi görünüyor.


Giriş operatörü do_get çağırır kimin std::num_get model yerel ayarı kullanır. C 11 std::strtoll et kullanmak için belirtilen. al. tip fonksiyonları. C 11 önce anlaşılan std::scanf stil ayrıştırma (referans alarak C 03 belirtimi için erişim yok) numaraları ayıklamak için kullanılır. Davranış değişikliği giriş ayrıştırma bu değişiklikten kaynaklanmaktadır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HER0R

    HER0R

    16 Aralık 2007
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010