Articles of c ++ faq

Por que precisamos realmente de inheritance privada ou protegida em C ++?

Em C ++, não consigo pensar em um caso em que gostaria de herdar private / protected de uma class base: class Base; class Derived1 : private Base; class Derived2 : protected Base; Isso é realmente útil?

Passando pointers compartilhados como argumentos

Se eu declarar um object envolto em um ponteiro compartilhado: std::shared_ptr myClassObject(new myClass()); então eu queria passar isso como um argumento para um método: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr arg1) { arg1->someField = 4; } O acima simplesmente incrementa a contagem de referência do shared_pt e tudo é legal? Ou deixa um ponteiro pendente? […]

Devo include ou em programas C ++?

O que devo include em programas C ++, stdio.h ou cstdio ? e porque? Por que dois arquivos de header que fornecem a mesma funcionalidade? O que o padrão diz sobre isso? Como devo include outros headers? Existe uma regra básica que eu deveria seguir?

Especialização em modelos de membros específicos?

É possível especializar membros específicos de uma class de modelo? Algo como: template struct X { void Specialized(); }; template void X::Specialized() { … } template void X::Specialized() { … } Claro, esse código não é válido.

O método std :: list :: remove destrói a chamada de cada elemento removido?

std::list lst; //…. Node * node = /* get from somewhere pointer on my node */; lst.remove(node); O std :: list :: remove método de destruição de chamada (e memory livre) de cada elemento removido? Se sim, como posso evitar isso?

Por que o `std :: move` é chamado` std :: move`?

A function C ++ 11 std::move(x) realmente não move nada. É apenas um casting para o valor r. Por que isso foi feito? Isso não é enganoso?

Resultado de ponto flutuante diferente com otimização ativada – bug do compilador?

O código abaixo funciona no Visual Studio 2008 com e sem otimização. Mas só funciona em g ++ sem otimização (O0). #include #include #include double round(double v, double digit) { double pow = std::pow(10.0, digit); double t = v * pow; //std::cout << "t:" << t << std::endl; double r = std::floor(t + 0.5); //std::cout […]

Por que uma class de modelo derivada não tem access a identificadores de uma class de modelo base?

Considerar: template class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; } template class Derived : public Base { public: Derived( bool initZero = NO_ZEROFILL ); // NO_ZEROFILL is not visible ~Derived(); } Eu não sou capaz de compilar isso com GCC g ++ 3.4.4 (cygwin). Antes de […]

Quais são as vantagens de usar nullptr?

Este pedaço de código conceitualmente faz a mesma coisa para os três pointers (boot de ponteiro seguro): int* p1 = nullptr; int* p2 = NULL; int* p3 = 0; E então, quais são as vantagens de atribuir pointers nullptr ao atribuir-lhes os valores NULL ou 0 ?

Como fazer com que o IOStream funcione melhor?

A maioria dos usuários de C ++ que aprenderam C preferem usar a família de funções printf / scanf mesmo quando estão codificando em C ++. Embora eu admita que eu ache a interface melhor (especialmente formato e localização semelhantes a POSIX), parece que uma grande preocupação é o desempenho. Tomando a olhar para esta […]