Articles of c ++ 11

Quais são as diferenças entre boot semelhante a C, construtor e uniforme?

TTBOMK, Existem três maneiras de inicializar uma variável em C ++. int x = 0; // C-like initialization int x (0); // Constructor initialization int x {0}; // Uniform initialization A boot uniforme foi ativada para o C ++ 11 para fornecer uma syntax mais uniforme para inicializar diferentes tipos de variables, o que exigiu […]

Por que não pode clang com libc ++ no link c ++ modo 0x este exemplo boost :: program_options?

Compilando este código de exemplo para boost :: program_options: http://svn.boost.org/svn/boost/trunk/libs/program_options/example/first.cpp … no MacOS Lion (10.7.2), usando o boost-1.48.0 instalado com o MacPorts: $ clang++ -v Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn) Target: x86_64-apple-darwin11.2.0 Thread model: posix $ clang++ -std=c++0x –stdlib=libc++ -lc++ -I/opt/local/include -L/opt/local/lib -lboost_program_options first.cpp -o first Undefined symbols for architecture x86_64: […]

Deprecação da palavra-chave estática … não mais?

Em C ++, é possível usar a palavra-chave static dentro de uma unidade de tradução para afetar a visibilidade de um símbolo (declaração de variável ou function). No n3092, isso foi reprovado: Anexo D.2 [deprático] O uso da palavra-chave static está obsoleto ao declarar objects no escopo de namespace (consulte 3.3.6). No n3225, isso foi […]

Por que o lambda do C ++ 11 requer uma palavra-chave “mutável” para captura por valor, por padrão?

Exemplo Curto: #include int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } A pergunta: Por que precisamos da palavra-chave mutable ? É bem […]

Loop baseado em intervalo de C ++ 11: obter item por valor ou referência a const

Lendo alguns exemplos de loops baseados em intervalos, eles sugerem duas maneiras principais 1 , 2 , 3 , 4 std::vector vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec’s items by changing x } ou for (auto x : vec) { […]

Inicialização agregada de C ++ 11 para classs com inicializadores de membro não estático

É permitido no padrão: struct A { int a = 3; int b = 3; }; A a{0,1}; // ??? Essa class ainda é agregada? clang aceita este código, mas o gcc não.

Diferença em shared_ptr make_shared e normal em C ++

std::shared_ptr p1 = std::make_shared(“foo”); std::shared_ptr p2(new Object(“foo”)); Muitas postagens do google e stackoverflow estão lá, mas não consigo entender por que o make_shared é mais eficiente do que usar diretamente o shared_ptr . Alguém pode me explicar passo a passo a seqüência de objects criados e as operações feitas por ambos para que eu seja […]

Por que não há uma especialização std :: shared_ptr ?

O padrão fornece uma especialização de modelo de std::unique_ptr que chama corretamente o delete[] de seu destruidor: void func() { std::unique_ptr arr(new int[10]); ……. } Com std::shared_ptr esta especialização não está disponível, então é necessário fornecer um deleter que chame corretamente delete[] : void func() { // Usage shared_ptr array (new double [256], [](double* arr) […]

reinterpret_cast criando um object trivialmente construtível por padrão

cppreference † afirma que: Objetos com construtores padrão triviais podem ser criados usando reinterpret_cast em qualquer armazenamento adequadamente alinhado, por exemplo, na memory alocada com std::malloc . Isto implica que o seguinte é um código bem definido: struct X { int x; }; alignas(X) char buffer[sizeof(X)]; // (A) reinterpret_cast(buffer)->x = 42; // (B) Três perguntas […]

As funções virtuais podem ter parâmetros padrão?

Se eu declarar uma class base (ou class de interface) e especificar um valor padrão para um ou mais de seus parâmetros, as classs derivadas precisam especificar os mesmos padrões e, se não, quais padrões se manifestarão nas classs derivadas? Adenda: Também estou interessado em saber como isso pode ser tratado em diferentes compiladores e […]