Articles of c ++ 11

Por que não posso criar um vetor de lambdas (do mesmo tipo) em C ++ 11?

Eu estava tentando criar um vetor de lambda, mas falhei: auto ignore = [&]() { return 10; }; //1 std::vector v; //2 v.push_back([&]() { return 100; }); //3 Até a linha # 2, compila bem . Mas a linha # 3 dá erro de compilation : erro: nenhuma function correspondente para chamar para ‘std :: […]

cc1plus: erro: opção de linha de comando não reconhecida “-std = c ++ 11” com g ++

Eu estou tentando compilar usando g++ e os -std=c++11 ou c++0x . No entanto, recebo este erro cc1plus: error: unrecognized command line option “-std=c++11” g ++ –version g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; […]

O que é o construtor de aliasing do shared_ptr para?

Nesta página ( http://www.cplusplus.com/reference/memory/shared_ptr/ ), parágrafo 5, diz: Além disso, os objects shared_ptr podem compartilhar a propriedade sobre um ponteiro enquanto, ao mesmo tempo, apontam para outro object. Essa capacidade é conhecida como aliasing (consulte construtores) e é comumente usada para apontar para objects de membros enquanto possui o object ao qual eles pertencem. Por […]

Por que o C ++ 11 tem o `make_shared`, mas não o` make_unique` ?

Duplicar Possível: make_unique e encaminhamento perfeito Por que o C ++ 11 tem um modelo make_shared , mas não um modelo make_unique ? Isso torna o código muito inconsistente. auto x = make_shared(“abc”); auto y = unique_ptr(new string(“abc”));

É 1.0 uma saída válida de std :: generate_canonical?

Eu sempre achei que números randoms ficariam entre zero e um, sem 1 , ou seja, eles são números do intervalo semiaberto [0,1]. A documentação em cppreference.com de std::generate_canonical confirma isso. No entanto, quando eu corro o seguinte programa: #include #include #include int main() { std::mt19937 rng; std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, […]

Por que o std :: pow (double, int) foi removido do C ++ 11?

Enquanto olhando para a maneira eficiente de calcular p ^ q (exponenciação), onde q é um inteiro e revendo os padrões C ++ 98 e C ++ 11, notei que aparentemente a sobrecarga std::pow(double, int) foi removida em C ++ 11 Em C ++ 98 26.5 / 6 tem o double pow(double, int); assinatura. Em […]

Lambda captura como referência const?

É possível capturar por referência const em uma expressão lambda? Eu quero que a atribuição marcada abaixo falhe, por exemplo: #include #include #include #include using namespace std; int main() { string strings[] = { “hello”, “world” }; static const size_t num_strings = sizeof(strings)/sizeof(strings[0]); string best_string = “foo”; for_each( &strings[0], &strings[num_strings], [&best_string](const string& s) { best_string […]

C ++ 11 lambdas capturam variables ​​que não usam?

Quando eu uso [=] para indicar que gostaria que todas as variables ​​locais fossem capturadas pelo valor em um lambda, isso resultaria em todas as variables ​​locais na function sendo copiada, ou apenas todas as variables ​​locais que são usadas pelo lambda ? Então, por exemplo, se eu tenho: vector my_huge_vector(100000); int my_measly_int; some_function([=](int i){ […]

Em C ++ 11, o `i + = ++ i + 1` exibe um comportamento indefinido?

Esta questão surgiu enquanto eu estava lendo (as respostas para) Então por que i = ++ i + 1 é bem definido em C ++ 11? Eu entendo que a explicação sutil é que (1) a expressão ++i retorna um lvalue, mas + assume prvalues ​​como operandos, então uma conversão de lvalue para prvalue deve […]

Por que a conversão da string constante para ‘char *’ é válida em C, mas é inválida em C ++?

O C ++ 11 Standard (ISO / IEC 14882: 2011) diz no § C.1.1 : char* p = “abc”; // valid in C, invalid in C++ Para o C ++, tudo bem como um ponteiro para um String Literal é prejudicial, pois qualquer tentativa de modificá-lo leva a uma falha. Mas por que é válido […]