2009-12-24 3 views
2

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

double pi = 3.14159265; 

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

cout << pi << endl; 

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

ответ

3

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

1

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

7.19.6.1 fprintf функция

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

Я ожидаю, что поведение C++ std :: ostream совместимо с печатью ввода/вывода C. fprintf и связанные с ним функции.

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

Смежные вопросы