Domande taggate «language-lawyer»

Per domande sulla complessità di specifiche formali o autorevoli di linguaggi e ambienti di programmazione.


3
Va bene restituire il valore dell'argomento predefinito tramite riferimento const?
Va bene restituire il valore dell'argomento predefinito per riferimento const come negli esempi seguenti: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include <string> const std::string& foo(const std::string& s = std::string("")) { return s; } int main() { const std::string& s1 = foo(); std::string s2 = foo(); const std::string& s3 = foo("s"); std::string s4 = foo("s"); }


3
Il compilatore può piegare costantemente una volatile locale?
Considera questo semplice codice: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Puoi vedere che gccné clangottimizzare né ottimizzare la potenziale chiamata a g. Questo è corretto nella mia comprensione: la macchina astratta è quella di supporre che le volatilevariabili possano cambiare in …


3
Concetti di C ++ 20: quale specializzazione di template viene scelta quando l'argomento template si qualifica per più concetti?
Dato: #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> w; …






4
Conversione implicita non consentita al ritorno
#include <optional> bool f() { std::optional<int> opt; return opt; } Non compilare: 'return': cannot convert from 'std::optional<int>' to 'bool' Consultazione di riferimento Avrei pensato di trovare una spiegazione, ma l'ho letto come dovrebbe essere ok. Le conversioni implicite vengono eseguite ogni volta che nel contesto viene utilizzata un'espressione di un …

1
Perché {} come argomento della funzione non porta all'ambiguità?
Considera questo codice: #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
È valido usare std :: transform con std :: back_inserter?
Cppreference ha questo codice di esempio per 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; }); Ma dice anche: std::transformnon garantisce l'applicazione in ordine di unary_opo binary_op. Per applicare una funzione a una sequenza in ordine o per applicare una funzione che modifica gli …


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.