Articles of c ++ 14

Pode retornar uma variável local por valor em C ++ 11/14 resultar no valor de retorno sendo construído por rvalue quando nenhuma cópia / movimentação está envolvida?

Eu sei que na seguinte situação que o compilador está livre para mover-construir o valor de retorno de makeA (mas também é livre para elidir a cópia ou mover completamente): struct A { A(A&); A(A&&); }; A makeA() { A localA; return localA; } O que eu imagino é se o compilador tem permissão para […]

Quais são alguns usos de decltype (auto)?

Em c ++ 14, o idioma decltype(auto) é introduzido. Normalmente, seu uso é permitir que auto declarações auto usem as regras de decltype na expressão especificada . Procurando por exemplos de uso “bom” do idioma eu só posso pensar em coisas como as seguintes (por Scott Meyers ), ou seja, para dedução de tipo de […]

C ++ 11: Corrigir a boot do std :: array?

Se eu inicializar um std :: array da seguinte maneira, o compilador me avisa sobre falta de chaves std::array a = {1, 2, 3, 4}; Isso corrige o problema: std::array a = {{1, 2, 3, 4}}; Esta é a mensagem de aviso: missing braces around initializer for ‘std::array::value_type [4] {aka int [4]}’ [-Wmissing-braces] Isso é […]

Como implementar a function make_unique no C ++ 11?

Meu compilador não suporta make_unique. Como escrever um? template unique_ptr make_unique( Args&&… args );

Por que usar std :: bind sobre lambdas em C ++ 14?

Antes do C ++ 11 eu usei boost::bind ou boost::lambda muito. A parte do bind tornou-se na biblioteca padrão ( std::bind ) e a outra parte tornou-se parte da linguagem principal (C ++ lambdas) e tornou o uso de lambdas muito mais fácil. Hoje em dia, dificilmente uso std::bind , já que posso fazer quase […]

Verifique as características de todos os argumentos de modelo variadic

Background: Eu criei a seguinte class C , cujo construtor deve ter N variables ​​do tipo B& : class A; class B { A* getA(); }; template class C { public: template inline C(Args&… args) : member{args.getA()…} {} private: std::array member; }; Problema: meu problema é como restringir os Args para serem todos do tipo […]

static_assert dependente do parâmetro de modelo não-tipo (comportamento diferente no gcc e clang)

template struct Hitchhiker { static_assert(sizeof(answer) != sizeof(answer), “Invalid answer”); }; template struct Hitchhiker {}; Ao tentar desativar a instanciação geral de modelo com static_assert , descobri que o código acima no clang gera o erro assert, mesmo quando o modelo não é instanciado, enquanto o gcc gera o erro assert apenas ao instanciar o Hitchhiker […]

Como o lambda genérico funciona em C ++ 14?

Como funciona o lambda genérico (palavra auto chave auto como um tipo de argumento) no padrão C ++ 14? É baseado em modelos C ++, onde cada compilador tipo de argumento gera uma nova function com o mesmo corpo, mas substituiu tipos (polymorphism em tempo de compilation) ou é mais semelhante aos genéricos de Java […]

O auto como parâmetro em uma function regular é uma extensão do GCC 4.9?

O gcc 4.9 permite o seguinte código, mas o gcc 4.8 e o clang 3.5.0 o rejeitam. void foo(auto c) { std::cout << c.c_str(); } Eu recebo warning: ISO C++ forbids use of ‘auto’ in parameter declaration [-Wpedantic] em 4.9, mas em 4.8 e clang recebo error: parameter declared ‘auto’ .

Diferenças entre std :: make_unique e std :: unique_ptr

O std::make_unique tem algum benefício de eficiência como o std::makes_shared ? Comparado com a construção manual de std::unique_ptr : std::make_unique(1); // vs std::unique_ptr(new int(1));