Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Calculation of the Type of the Result

Boost , Math Toolkit 2.5.0 , Chapter 1. Overview

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Функции в этой библиотеке перегружены для принятия аргументов смешанной плавающей точки (или смешанного целого числа и типа плавающей точки). Например:

foo(1.0, 2.0);
foo(1.0f, 2);
foo(1.0, 2L);

и т.д., являются действительными вызовами, если «фоо» является функцией, принимающей два аргумента с плавающей точкой. Но это оставляет вопрос:

Если все аргументы имеют один и тот же тип, то результат является тем же типом, что и аргументы.

В противном случае тип результата вычисляется по следующей логике:

  1. Любые аргументы, которые не являются шаблонными, не учитываются при дальнейшем анализе.
  2. Для каждого типа в списке аргументов, если этот тип является целым типом, то он рассматривается как двойной тип для целей дальнейшего анализа.
  3. Если какой-либо из аргументов является определяемым пользователем типом класса, то тип результата является первым таким типом класса, который может быть построен из всех других типов аргументов.
  4. Если же речь идет о каком-либо из аргументов типа<long double>, то результат — типа<longdouble>.
  5. Если же какой-либо из аргументов относится к типу<double>, то результат относится к типу<double>.
  6. В противном случае получается тип<float>.

Например:

cyl_bessel(2, 3.0);

Возвращает результат<double>:

cyl_bessel(2, 3.0f);

В этом случае первый аргумент рассматривается как<double>и имеет приоритет над<float>вторым аргументом. Чтобы получить результат<float>, нам нужны все аргументы, чтобы быть в форме:

cyl_bessel_j(2.0f, 3.0f);

Когда один или несколько аргументов не являются шаблонным аргументом, это не влияет на тип возврата, например:

sph_bessel(2, 3.0f);

<float>, так как первый аргумент не является шаблонным аргументом и поэтому не влияет на результат: без этого правила функции, которые принимают явно целые аргументы, никогда не могли бы вернуться<float>.

И для определенных пользователем типов все следующие результаты возвращают<NTL::RR>:

cyl_bessel_j(0, NTL::RR(2));
cyl_bessel_j(NTL::RR(2), 3);
cyl_bessel_j(NTL::quad_float(2), NTL::RR(3));

В последнем случае<quad_float>конвертируется в<RR>, но не наоборот, поэтому результат будет<NTL::RR>. Обратите внимание, что это предполагает, что вы используетеисправленную библиотеку NTL.

Эти правила выбраны для совместимости с поведениемISO/IEC 9899:1999 Языки программирования - Cи сПроект технического доклада о расширении библиотек С++, 2005-06-24, раздел 5.2.1, пункт 5.


PrevUpHomeNext

Статья Calculation of the Type of the Result раздела Math Toolkit 2.5.0 Chapter 1. Overview может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Overview ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:51:28/0.0067789554595947/0