Articles of c ++ 11

Como fazer cálculos genéricos sobre pacotes de argumentos heterogêneos de uma function de modelo variadico?

PREMISSA: Depois de brincar um pouco com os modelos variádicos, percebi que conseguir qualquer coisa que fosse um pouco além das tarefas triviais de meta-programação logo se torna bastante incômoda. Em particular, encontrei-me desejando uma maneira de executar operações genéricas em um pacote de argumentos como iterar , dividir , executar um loop em uma […]

Múltiplas mutações dentro de listas de inicializadores são comportamentos indefinidos?

Estou curioso sobre listas de inicializadores e pontos de sequência. Eu li há algum tempo que a ordem de avaliação nas listas de inicializadores é da esquerda para a direita. Se é assim, então deve haver algum tipo de ponto de seqüência entre os pontos de avaliação, estou errado? Então, com isso dito é o […]

ordem de avaliação de operandos

Na expressão a + b , é garantido que será avaliado antes de b ou a ordem de avaliação não é especificada? Eu acho que é o último, mas eu me esforço para encontrar uma resposta definitiva no padrão. Desde que eu não sei se C trata isso diferente do C ++, ou se as […]

Regex C ++ 0x no GCC

O seguinte código: #include using namespace std; (snippage) regex_search(s, m, re); funciona no Microsoft C ++, mas o GCC 4.4.3 fornece a seguinte mensagem de erro: /usr/include/c++/4.4/tr1_impl/regex:2255: warning: function inline ‘bool std :: regex_search (_Bi_iter, _Bi_iter, std :: match_results &, const std :: basic_regex &, std :: regex_constants :: match_flag_type) [com _Bi_iter = __gnu_cxx :: […]

constexpr e boot de um ponteiro estático const void com reinterpret cast, qual compilador está certo?

Considere o seguinte trecho de código: struct foo { static constexpr const void* ptr = reinterpret_cast(0x1); }; auto main() -> int { return 0; } O exemplo acima compila bem em g ++ v4.9 ( Live Demo ), enquanto ele falha em compilar no clang v3.4 ( Live Demo ) e gera o seguinte erro: […]

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 );

“Downcasting” unique_ptr para unique_ptr

Eu tenho uma série de fábricas que retornam unique_ptr . Sob o capô, no entanto, eles estão fornecendo pointers para vários tipos derivados, ou seja, unique_ptr , unique_ptr , unique_ptr etc. Dado DerivedA : Derived and Derived : Base , teríamos: unique_ptr DerivedAFactory() { return unique_ptr(new DerivedA); } O que eu preciso fazer é “converter” […]

Removendo item do vetor, enquanto no C ++ 11 range ‘for’ loop?

Eu tenho um vetor de IInventory *, e eu estou em loop através da lista usando o intervalo de C ++ 11, para fazer coisas com cada um. Depois de fazer algumas coisas com um, talvez queira removê-lo da lista e excluir o object. Eu sei que posso chamar delete no ponteiro a qualquer momento […]

Existe algum caso em que um retorno de uma referência RValue (&&) é útil?

Existe uma razão quando uma function deve retornar uma referência RValue ? Uma técnica ou truque, ou um idioma ou padrão? MyClass&& func( … ); Estou ciente do perigo de retornar as referências em geral, mas às vezes fazemos isso de qualquer maneira, não fazemos ( T& T::operator=(T) é apenas um exemplo idiomático). Mas que […]

Quais são as regras para a geração automática de operações de movimentação?

Em C ++ 98, o compilador C ++ poderia gerar automaticamente o construtor de cópia e o operador de atribuição de cópia via cópia de membros, por exemplo struct X { std::string s; std::vector v; int n; }; O compilador gera automaticamente o construtor de cópias e o operador de atribuição de cópias para X […]