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

  • colacas

    colacas

    29 EKİM 2006
  • George McCarron

    George McCar

    29 Mayıs 2013
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006