Perguntas com a marcação «c++»

C ++ é uma linguagem de programação de uso geral. Foi originalmente projetado como uma extensão para C e tem uma sintaxe semelhante, mas agora é uma linguagem completamente diferente. Use esta tag para perguntas sobre o código (a ser) compilado com um compilador C ++. Use uma tag específica da versão para perguntas relacionadas a uma revisão padrão específica [C ++ 11], [C ++ 14], [C ++ 17] ou [C ++ 20] etc.

3
Tudo bem retornar o valor do argumento padrão por referência const?
Tudo bem retornar o valor do argumento padrão por referência const, como nos exemplos abaixo: 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
Como posso criar uma maneira cartesiana de produtos de listas de tipos em C ++?
Auto-explicativo. Basicamente, digamos que eu tenha listas de tipos assim: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Eles podem ser um número variável de listas de tipos. Como obtenho uma lista de tipos de produto cartesiano? result = type_list< type_list<int, somestructB, double>, type_list<int, …



4
Contêiner STL com um tipo específico como argumento genérico
Existe alguma maneira que eu possa fazer uma função que pega um contêiner com um tipo específico (digamos std::string) como parâmetro void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } e chamá-lo para todos os tipos de contêiner stl como entrada? como acima? …


2
O operador std :: unordered_map [] faz a inicialização zero para a chave não existente?
De acordo com cppreference.com, std::map::operator[]para valor inexistente, a inicialização é zero. No entanto, o mesmo site não menciona inicialização zero std::unordered_map::operator[], exceto que possui um exemplo que depende disso. Claro que este é apenas um site de referência, não o padrão. Então, o código abaixo está ok ou não? #include …

2
Inicializadores designados em C ++ 20
Tenho uma pergunta sobre um dos recursos do c ++ 20, inicializadores designados (mais informações sobre esse recurso aqui ) #include <iostream> constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout << std::boolalpha …


3
qual é o caso de uso explícito (bool)
O C ++ 20 introduziu explícito (bool) que seleciona condicionalmente em tempo de compilação se um construtor é explicitado ou não. Abaixo está um exemplo que eu encontrei aqui . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T> explicit(!std::is_integral_v<T>) foo(T) {} }; …
24 c++  c++20  explicit 


1
Por que `decltype (static_cast <T> (...))` nem sempre é `T`?
Para o código a seguir, quase a última asserção passa: template&lt;typename T&gt; constexpr void assert_static_cast_identity() { using T_cast = decltype(static_cast&lt;T&gt;(std::declval&lt;T&gt;())); static_assert(std::is_same_v&lt;T_cast, T&gt;); } int main() { assert_static_cast_identity&lt;int&gt;(); assert_static_cast_identity&lt;int&amp;&gt;(); assert_static_cast_identity&lt;int&amp;&amp;&gt;(); // assert_static_cast_identity&lt;int(int)&gt;(); // illegal cast assert_static_cast_identity&lt;int (&amp;)(int)&gt;(); assert_static_cast_identity&lt;int (&amp;&amp;)(int)&gt;(); // static assert fails } Por que esta última afirmação falha e …
24 c++  static-cast 

3
Conceitos do C ++ 20: Qual especialização de modelo é escolhida quando o argumento do modelo se qualifica para vários conceitos?
Dado: #include &lt;concepts&gt; #include &lt;iostream&gt; template&lt;class T&gt; struct wrapper; template&lt;std::signed_integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "signed_integral" &lt;&lt; std::endl; } }; template&lt;std::integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "integral" &lt;&lt; std::endl; } }; int main() { wrapper&lt;int&gt; w; …

2
Por que essa função de modelo não se comporta conforme o esperado?
Eu estava lendo sobre funções de modelo e fiquei confuso com este problema: #include &lt;iostream&gt; void f(int) { std::cout &lt;&lt; "f(int)\n"; } template&lt;typename T&gt; void g(T val) { std::cout &lt;&lt; typeid(val).name() &lt;&lt; " "; f(val); } void f(double) { std::cout &lt;&lt; "f(double)\n"; } template void g&lt;double&gt;(double); int main() { f(1.0); …


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.