C ++ 17 to nazwa standardu C ++ zatwierdzonego w 2017 roku. Opiera się on na poprzednim standardzie C ++ 14, ulepszając podstawowy język i standardową bibliotekę oraz dodając kilka nowych funkcji językowych.
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 …
Nie można skompilować: #include <iostream> int main() { int a{},b{},c{},d{}; for (auto& s : {a, b, c, d}) { s = 1; } std::cout << a << std::endl; return 0; } Wypróbuj na Godbolt Błąd kompilatora to: error: assignment of read-only reference 's' Teraz w moim przypadku lista składa się …
Nie jestem przyzwyczajony do używania weak_ptri mam do czynienia z dość mylącą sytuacją. Używam aktualizacji Intel XE 2019 Composer 5 ( pakiet 2019.5.281 ) w połączeniu z Visual Studio 2019 ver. 16.2.5 . Kompiluję w wersji 64-bitowej. Używam standardowego C ++ 17 . Oto kod mojego rozwiązania szczytowego: #include <memory> …
Jeśli się nie mylę, mogę wykonać std::transformdziałanie w miejscu , używając tego samego zakresu co iterator wejściowy i wyjściowy. Załóżmy, że mam jakiś std::vectorprzedmiot vec, a potem napiszę std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op) przy użyciu odpowiedniej operacji jednoargumentowej unary_op. Korzystając ze standardu C ++ 17, chciałbym wykonać transformację równolegle, wstawiając std::execution::partam jako pierwszy argument. …
Rozważ 2 następujące przeciążenia template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } Pierwszy działa dla klas regularnych, a drugi dla szablonów, które nie są tworzone. Na przykład: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 Teraz rozważ następującą funkcję …
Próbuję uzyskać dostęp do zawartości wariantu. Nie wiem co tam jest, ale na szczęście wariant wie. Pomyślałem więc, że po prostu zapytam wariant, na jakim jest indeksie, a następnie użyję tego indeksu do std::getjego zawartości. Ale to się nie kompiluje: #include <variant> int main() { std::variant<int, float, char> var { …
Bawiłem się std::string_viewbiblioteką i zastanawiałem się nad zmianą bazy kodu, nad którą pracowałem std::string_viewtak często, jak to możliwe. Jednak w wielu wątkach, które przeczytałem na temat tego, kiedy i gdzie użyć std::string_viewzamiast const std::string &. Widziałem wiele odpowiedzi mówiących: „Kiedy nie potrzebujesz łańcucha zakończonego znakiem zerowym”. Kiedy zacząłem szukać w …
Tworzę klasę typu łańcuchowego, na przykład mały przykład poniżej. Wydaje się, że przy łączeniu funkcji składowych wywoływany jest konstruktor kopiowania. Czy istnieje sposób na pozbycie się wywołania konstruktora kopiowania? W moim poniższym przykładzie z zabawkami oczywiste jest, że mam do czynienia tylko z tymczasowymi, dlatego też „powinien” (może nie według …
Myślę, że to dość proste pytanie. Chciałbym konkretnie użyć std::get_time, ale wymaga to pewnego rodzaju strumienia do użycia. Przekazuję dane w string_viewi chcę uniknąć kopiowania tylko w celu przeanalizowania daty.
Wysłuchałem i przeczytałem kilka artykułów, rozmów i pytań o przepełnienie stosu std::atomici chciałbym mieć pewność, że dobrze to zrozumiałem. Ponieważ nadal jestem trochę mylony z linią pamięci podręcznej zapisuje widoczność z powodu możliwych opóźnień w protokołach koherencji pamięci podręcznej MESI (lub pochodnych), buforach pamięci, unieważnianiu kolejek i tak dalej. Przeczytałem, …
Czy specyfikacja C ++ określa kolejność operator newi konstruktor Aw new C(A()). G ++ niech kolejność będzie A()-> new-> C(), ale clang ++ niech będzie new-> A()-> C(). Czy różnica jest spowodowana nieokreślonym zachowaniem? g ++: 7.4.0 clang ++: 10.0.0 #include <iostream> #include <cstdlib> struct A { A() { std::cout …
Rozważ następujący program demonstracyjny. #include <iostream> int main() { typedef float T; 0.f.T::~T(); } Ten program jest kompilowany przez Microsoft Visual Studio Community 2019. Ale clangi gccpoproś o taki błąd prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ Jeśli napiszesz takie wyrażenie, ( 0.f …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.