Udostępnij za pośrednictwem


/fpcvt (Zgodność konwersji zmiennoprzecinkowa na liczbę całkowitą)

Określa sposób, w jaki kompilator traktuje konwersje zmiennoprzecinkowe na typy całkowite.

Składnia

/fpcvt:IA
/fpcvt:BC

Argumenty

/fpcvt:IA

Opcja /fpcvt:IA nakazuje kompilatorowi konwertowanie wartości zmiennoprzecinkowych na liczby całkowite, aby wyniki były zgodne z instrukcjami konwersji Intel AVX-512. To zachowanie jest typowym zachowaniem w programie Visual Studio 2019 dla elementów docelowych x86.

/fpcvt:BC

Opcja /fpcvt:BC informuje kompilator o konwertowaniu wartości zmiennoprzecinkowych na liczby całkowite bez znaku, aby wyniki były zgodne z programem Visual Studio 2017 i wcześniejszymi kompilatorami. To zachowanie jest domyślne w programie Visual Studio 2022.

Uwagi

W programie Visual Studio 2019 w wersji /fpcvt 16.8 lub nowszej można użyć opcji kompilatora do kontrolowania wyników konwersji zmiennoprzecinkowych na liczbę całkowitą. Opcja /fpcvt:BC określa domyślne zachowanie programu Visual Studio 2022, który jest taki sam jak zachowanie programu Visual Studio 2017 i starszych wersji. Opcja /fpcvt:IA określa zachowanie zgodne z zachowaniem zgodnym z zachowaniem instrukcji konwersji AVX-512 w architekturze Intel Architecture (IA). Tej opcji można używać z 32-bitowymi elementami docelowymi x86 lub 64-bitowymi x64 i ma zastosowanie niezależnie od tego, czy /arch:AVX512 określono, czy nie.

W przypadku programu Visual Studio 2019 domyślne zachowanie elementów docelowych x64 jest zgodne z /fpcvt:BC , chyba że /arch:AVX512 zostanie określony. Zazwyczaj zachowanie obiektów docelowych x86 jest zgodne z elementem /fpcvt:IA, z wyjątkiem wartości /arch:IA32, /arch:SSElub czasami, gdy wynik wywołania funkcji jest bezpośrednio konwertowany na niepodpisaną liczbę całkowitą. Użycie przesłonięć wartości domyślnej /fpcvt , więc wszystkie konwersje są obsługiwane spójnie w obu elementach docelowych. Zachowanie konwersji obiektów docelowych ARM i ARM64 nie jest zgodne z elementami /fpcvt:BC docelowymi ani /fpcvt:IA.

Standard C++ określa, że jeśli obcięta wartość zmiennoprzecinkowa jest dokładnie reprezentowana w typie liczb całkowitych, musi mieć ją po przekonwertowaniu na ten typ. W przeciwnym razie wszelkie zachowania w ogóle są dozwolone. Obie /fpcvt opcje są zgodne ze standardową wersją C++. Jedyną różnicą jest to, jakie wartości są zwracane dla nieprawidłowych wartości źródłowych.

Opcja powoduje, że każda nieprawidłowa /fpcvt:IA konwersja zwraca pojedynczą wartość sentinel , która jest wartością docelową najdalej od zera. W przypadku konwersji na typy podpisane sentinel jest minimalną wartością tego typu. Typy niepodpisane używają maksymalnej wartości. Operacje zmiennoprzecinkowe mogą zwracać wartość Not-a-Number (NaN), aby wskazać nieprawidłową operację. Ten wskaźnik nie jest opcją konwersji na typy całkowite, które nie mają wartości NaN. Sentinel jest używany jako serwer proxy wartości NaN, chociaż może być również wynikiem prawidłowej konwersji.

Opcja /fpcvt:BC powoduje również konwersję na typy podpisane zwracają minimalną możliwą wartość, gdy źródło jest nieprawidłowe. Jednak konwersja na niepodpisane typy liczb całkowitych jest oparta na konwersji na long long. Aby przekonwertować wartość na unsigned int, kompilator najpierw konwertuje ją na typ long long. Następnie kompilator obcina wynik do 32 bitów. Aby przekonwertować wartość na unsigned long longwartość , prawidłowe wartości źródłowe, które są zbyt wysokie dla elementu long long , są obsługiwane jako szczególny przypadek. Wszystkie inne wartości są najpierw konwertowane na long long , a następnie ponownie przekształcane na unsigned long long.

Opcje /fpcvt są nowe w programie Visual Studio 2019 w wersji 16.8. Jeśli określisz więcej niż jedną /fpcvt opcję w wierszu polecenia, późniejsza opcja ma pierwszeństwo, a kompilator generuje ostrzeżenie.

Funkcje wewnętrzne konwersji

Można określić zachowanie konkretnej konwersji niezależnie od /fpcvt opcji, która ma zastosowanie globalnie. Kompilator udostępnia wewnętrzne funkcje konwersji sentinel na potrzeby konwersji zgodnych z /fpcvt:IAprogramem . Aby uzyskać więcej informacji, zobacz Funkcje konwersji usługi Sentinel. Kompilator udostępnia również funkcje konwersji nasycenia zgodne z konwersjami w architekturach docelowych arm lub ARM64. Aby uzyskać więcej informacji, zobacz Funkcje konwersji nasycenia.

Kompilator obsługuje również funkcje konwersji wewnętrznej, które są wykonywane tak szybko, jak to możliwe w przypadku prawidłowych konwersji. Te funkcje mogą generować dowolną wartość lub zgłaszać wyjątek dla nieprawidłowej konwersji. Wyniki zależą od platformy docelowej, opcji kompilatora i kontekstu. Są one przydatne do obsługi wartości, które zostały już sprawdzone przez zakres lub wartości wygenerowane w sposób, który nie może spowodować nieprawidłowej konwersji. Aby uzyskać więcej informacji, zobacz Funkcje szybkiej konwersji.

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).

  2. Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.

  3. Zmodyfikuj właściwość Opcje dodatkowe, aby dodać /fpcvt:IA element lub /fpcvt:BC. Wybierz przycisk OK , aby zapisać zmiany.

Aby programowo ustawić tę opcję kompilatora

Zobacz też

Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC
Funkcje szybkiej konwersji
Funkcje konwersji nasycenia
Funkcje konwersji usługi Sentinel