istringstream, что здесь происходит с num1 и num2? - PullRequest
0 голосов
/ 02 октября 2019

Я просматриваю книгу на C ++ (cpluplusnotes для профессионалов), попал в этот пример и мне было интересно, что здесь происходит с num1 / 2 и как влияет на него in (xxxx)?

Спасибо!

`#include <sstream>
...
std::istringstream in("10 010 10 010 10 010");
int num1, num2;
in >> std::oct >> num1 >> num2;
std::cout << "Parsing \"10 010\" with std::oct gives: " << num1 << ' ' << num2 << '\n';
// Output: Parsing "10 010" with std::oct gives: 8 8
in >> std::dec >> num1 >> num2;
std::cout << "Parsing \"10 010\" with std::dec gives: " << num1 << ' ' << num2 << '\n';
// Output: Parsing "10 010" with std::oct gives: 10 10
in >> std::resetiosflags(std::ios_base::basefield) >> num1 >> num2;
std::cout << "Parsing \"10 010\" with autodetect gives: " << num1 << ' ' << num2 << '\n';
// Parsing "10 010" with autodetect gives: 10 8
std::cout << std::setiosflags(std::ios_base::hex |
std::ios_base::uppercase |
std::ios_base::showbase) << 42 << '\n';
// Output: OX2A` 

Также отметим, что я понимаю окт, декабрь, шестнадцатеричное и все, что я просто не понимаю, как num1 / 2 были присвоены значения из in

1 Ответ

0 голосов
/ 02 октября 2019

std::oct и std::dec сообщают потоку, как преобразовать строку в целое число.

Если установлено одно из них, то num1 и num2 читаются так, как если бы они были записаныв базе 8 или 10.

Когда ничего не установлено, 10 читается как десятичное число (по умолчанию для цифр-строк, начинающихся не с 0), а 010 читается как восьмеричное (по умолчанию для цифр-строк начинаютсяс 0).

...