Pytania otagowane jako visual-c++

Microsoft Visual C ++ to kompilator C, C ++ i C ++ / CLI dla systemu Windows. Najnowsza wersja kompilatora to Visual C ++ 2019. Kompilator obsługuje następujące języki: C (obsługuje C90 i większość części C99 i C11 standardu ISO C ++ od Visual Studio 2019); C ++ (obsługa większości funkcji C ++ 11, C ++ 14 i C ++ 17 oraz niektórych funkcji C ++ 20 od wersji Visual Studio 2019) C ++ / CLI (Zapewnia współdziałanie z językami .NET, takimi jak C #).


2
Jak działa ten kod szablonu, aby uzyskać rozmiar tablicy?
Zastanawiam się, dlaczego ten rodzaj kodu może uzyskać rozmiar tablicy testowej? Nie znam gramatyki w szablonie. Może ktoś mógłby wyjaśnić znaczenie kodu pod template<typename,size_t>. Poza tym preferowany jest również link referencyjny. #define dimof(array) (sizeof(DimofSizeHelper(array))) template <typename T, size_t N> char(&DimofSizeHelper(T(&array)[N]))[N]; void InitDynCalls() { char test[20]; size_t n = dimof(test); printf("%d", …
61 c++  visual-c++ 

2
liczba całkowita -> reguły konwersji wskaźnika
Rozważ następujący kod. void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017 tego nie kompiluje. Oznacza to, że istnieje niejednoznaczne przeciążone wywołanie, ponieważ 1-1jest takie samo, jak 0i dlatego może zostać przekształcone w double*. Inne sztuczki, takie jak 0x0, 0Llub static_cast<int>(0)też nie …
19 c++  visual-c++  types 

1
Clang nie kompiluje kodu, ale skompilowały go gcc i msvc
Nie rozumiem, na czym polega problem: ani w moim kodzie, ani w kompilatorze (mniej możliwe). Jest taki kod: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : std::true_type …

1
Możliwy błąd kompilatora w MSVC
Poniższy kod kompiluje się z gcc i clang (i wieloma innymi kompilatorami C ++ 11) #include <stdint.h> typedef int datatype; template <typename T> struct to_datatype {}; template <> struct to_datatype<int16_t> { static constexpr datatype value = 1; }; template <typename T> class data { public: data(datatype dt = to_datatype<T>::value) {} …
13 c++  c++11  visual-c++ 

1
Czy zmienną wbudowaną można zmienić po inicjalizacji w C ++ 17?
Mój scenariusz jest następujący (działał w clang, ale nie w gcc) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); Problem polega na tym, że zmienna wbudowana pokazywała 0 w miejscach, w których spodziewałem się 28, ponieważ była ona …
11 c++  visual-c++  dll  clang  c++17 

3
Czy nullptr można przekonwertować na uintptr_t? Różne kompilatory się nie zgadzają
Rozważ ten program: #include <cstdint> using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } Nie udało się skompilować z msvc v19.24: <source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t' <source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to …
10 c++  c++11  gcc  visual-c++  clang 

1
Jaki jest odpowiednik MSVC dla -fno-char8_t?
W C ++ 20 u8literałów łańcuchowych jest opartych na char8_ttypie. Celowo nie przechodzą już na char const*: const char* str = u8"Hall\u00f6chen \u2603"; // no longer valid in C++20 Oczywiście ostatecznym celem migracji do C ++ 20 jest całkowite przejście na nowe zachowanie (w powyższym przykładzie: zmiana typu str). Jednak …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.