Pytania otagowane jako language-lawyer

W przypadku pytań dotyczących zawiłości formalnych lub autorytatywnych specyfikacji języków programowania i środowisk.

2
znaczenie inline w interfejsach modułów
Rozważ plik nagłówkowy: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; lub alternatywnie: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline T::T(int …

3
C ++ 20 Pojęcia: Którą specjalizację szablonu wybiera się, gdy argument szablonu kwalifikuje się do wielu pojęć?
Dany : #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> …

3
Różnica w zachowaniu zmiennego wychwytywania funkcji lambda z odniesienia do zmiennej globalnej
Stwierdziłem, że wyniki są różne w różnych kompilatorach, jeśli użyję lambda do przechwycenia odwołania do zmiennej globalnej za pomocą słowa kluczowego podlegającego modyfikacji, a następnie zmodyfikowania wartości w funkcji lambda. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() { int &m = n; return [m] () mutable -> …

1
Zastosowanie zmiennej we własnym inicjatorze
[basic.scope.pdecl] / 1 standardowego projektu C ++ 20 zawierał następujący (nienormatywny) przykład w notatce (częściowy cytat sprzed scalenia żądania ściągnięcia 3580 , patrz odpowiedź na to pytanie): unsigned char x = x; [...] x jest inicjalizowany z własną (nieokreśloną) wartością. Czy to rzeczywiście ma dobrze zdefiniowane zachowanie w C ++ …

3
Czy separator shared_ptr jest przechowywany w pamięci przydzielonej przez niestandardowy program przydzielający?
Powiedzmy, że mam shared_ptrniestandardowy alokator i niestandardowy usuwacz. Nie mogę znaleźć w standardzie niczego, co mówi o tym, gdzie powinien być przechowywany usuwacz: nie mówi, że niestandardowy alokator zostanie użyty do pamięci usuwacza, i nie mówi, że nie będzie. Czy jest to nieokreślone, czy coś mi brakuje?


4
Niejawna konwersja niedozwolona po powrocie
#include <optional> bool f() { std::optional<int> opt; return opt; } Nie kompiluje: 'return': cannot convert from 'std::optional<int>' to 'bool' Odniesienie do konsultacji Chciałbym znaleźć wyjaśnienie, ale przeczytałem je tak, jak powinno być dobrze. Konwersje niejawne są wykonywane za każdym razem, gdy wyrażenie pewnego typu T1 jest używane w kontekście, który …


1
Dlaczego {} jako argument funkcji nie prowadzi do niejednoznaczności?
Rozważ ten kod: #include <vector> #include <iostream> enum class A { X, Y }; struct Test { Test(const std::vector<double>&, const std::vector<int>& = {}, A = A::X) { std::cout << "vector overload" << std::endl; } Test(const std::vector<double>&, int, A = A::X) { std::cout << "int overload" << std::endl; } }; int …

4
Czy można używać std :: transform z std :: back_inserter?
Cppreference ma ten przykładowy kod dla std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Ale mówi również: std::transformnie gwarantuje zastosowania unary_oplub binary_op. Aby zastosować funkcję do sekwencji w kolejności lub zastosować funkcję, która modyfikuje elementy sekwencji, użyj std::for_each. Ma to prawdopodobnie umożliwić równoległe …


2
Pierwszeństwo / priorytet operatora strzałki (->) jest najniższy, czy priorytet przypisania / przypisania łączonego jest najniższy?
JLS : Operatorem o najniższym priorytecie jest strzałka wyrażenia lambda (->) , po której następują operatory przypisania. Podążano w jakim kierunku (zwiększenie priorytetu, zmniejszenie priorytetu)? - „obserwowane” oznacza przypisanie o wyższym priorytecie lub niższym priorytecie (w odniesieniu do operatora strzałki)? Wydaje mi się, że rośnie, ponieważ „najniższy” (dla strzałki) oznacza …


1
Dlaczego standard C ++ obsługuje wyszukiwanie plików w taki sposób?
C ++ używa tego streamofftypu do reprezentowania przesunięcia w strumieniu (pliku) i jest zdefiniowany w następujący sposób w [stream.types]: using streamoff = implementation-defined ; Typ streamoff jest synonimem jednego z podpisanych podstawowych integralnych typów o wystarczającym rozmiarze, aby reprezentować maksymalny możliwy rozmiar pliku dla systemu operacyjnego. 287) 287) Zazwyczaj długi. …

1
Czy Clang słusznie odrzuca kod, w którym zagnieżdżona klasa szablonu klasy jest definiowana tylko poprzez specjalizacje?
Biorąc pod uwagę następujący szablon klasy: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; definiujemy Innerosobno dla każdej specjalizacji Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; a następnie raz zdefiniuj funkcję członka fdla wszystkich specjalizacji Outer: auto Outer<T>::f(Inner) -> void { } ale Clang …

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.