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

  • Break

    Break

    10 Aralık 2005
  • Jonnyriddlin1

    Jonnyriddlin

    4 Ocak 2007
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007