Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Zapewnienie constexpr
#11
Więc przypisuje to @ n0xius, najwyraźniej jest to dziwny problem w MSVC. Nie jestem do końca pewien, ale działa tak, że problem jest zamknięty? C ++: #define FNV1 (str) \ [&] () {\ constexpr uint64_t ret = Crypto :: FNV1 :: fnv1 (str); \ return ret; \} ()
Reply
#12
Jakiś czas temu miałem ten sam problem. Po kilku badaniach moja pierwsza próba również była forceinline, trochę rozczarowana, że MSVC po prostu ją ignoruje. Czy ktoś ma ku temu powód?
Reply
#13
Zacytować: Originally Posted by freakyy Jakiś czas temu miałem ten sam problem. Po kilku badaniach moja pierwsza próba również była forceinline, trochę rozczarowana, że MSVC po prostu ją ignoruje. Czy ktoś ma ku temu powód? Zacytować: Originally Posted by MSDN Kompilator traktuje wbudowane opcje rozszerzeń i słowa kluczowe jako sugestie. Nie ma gwarancji, że funkcje będą włączone. Nie można zmusić kompilatora do wstawienia konkretnej funkcji, nawet za pomocą słowa kluczowego __forceinline. https://msdn.microsoft.com/en-us/library/bw1hbe6y.aspx
Reply
#14
Zacytować: Originally Posted by freakyy Jakiś czas temu miałem ten sam problem. Po kilku badaniach moja pierwsza próba również była forceinline, trochę rozczarowana, że MSVC po prostu ją ignoruje. Czy ktoś ma ku temu powód? Jak powiedział Michael, __forceinline jest bardzo silną wskazówką dla kompilatora. Również MSVC nie będzie nawet próbował wstawiać niczego, nawet jeśli jest zaznaczone __forceinline w domyślnych ustawieniach debugowania.
Reply
#15
Zacytować: Napisał pierwotnie IIaze Wiesz, że constexpr po prostu stwierdza, że możliwe jest oszacowanie wyrażenia w czasie kompilacji? Oczywiście decyzja należy do kompilatora. O co tu chodzi nawet. Tak, to zależy od kompilatora, ale czasami kompilator jest nieprawidłowy i starałem się upewnić, że moje skróty łańcuchowe zostały skompilowane do uint64_t i nie mają ciągu z wywołaniem funkcji mieszania pozostawionej w pliku binarnym.
Reply
#16
Jeśli nadal masz problemy z kompilacją stałych ciągów znaków, spróbuj zmienić flagę optymalizacji z / Ox (Full Optimization) na / O2 (Maximize Speed). Złożyłem już raport o błędzie do MSVC, więc mam nadzieję, że zostanie to naprawione w późniejszej aktualizacji. ¯ \ _ (ツ) _ / ¯
Reply




Users browsing this thread: 1 Guest(s)