отрицательные значения точности в ostream - PullRequest
2 голосов
/ 24 декабря 2009

Это скорее вопрос любопытства, но кто-нибудь знает, как обрабатываются значения с отрицательной точностью в C ++? Например:

double pi = 3.14159265;

cout.precision(-10);
cout.setf(ios::fixed, ios::floatfield);

cout << pi << endl;

Я попробовал это и использовал GCC, и кажется, что значение точности игнорируется, но мне было любопытно, есть ли какая-то официальная линия о том, что происходит в этой ситуации.

Ответы [ 2 ]

3 голосов
/ 24 декабря 2009

Странно (и неправильно, ИМХО) Стандарт C ++ определяет тип со знаком (streamsize) в качестве параметра для точности, поэтому он не будет преобразован в большое число. Однако в стандарте ничего не говорится о том, что может означать отрицательное число.

1 голос
/ 08 апреля 2010

Я не могу найти никакой спецификации этого поведения ни в C ++ 03 , ни в черновиках C ++ 0x (N3092) . Однако стандарт C89 гласит:

7.19.6.1 Функция fprintf

Отрицательный аргумент точности принимается так, как если бы точность была опущена.

Я ожидал бы, что поведение C ++ std :: ostream согласуется с printf C / I / O. fprintf и связанные с ним функции.

Быстрый тест с Visual C ++ 10.0 и GCC 4.4.1 предполагает, что это так, а отрицательная точность означает, что точность не указана. И, исключенная точность означает значение по умолчанию, которое 6 мест, как указано в 27.5.4.1 basic_ios constructors в Таблица 125

...