Articles of c ++ faq

Quando parênteses extras têm um efeito diferente da precedência do operador?

Parênteses em C ++ são usados ​​em muitos lugares: por exemplo, em chamadas de function e expressões de agrupamento para replace a precedência do operador. Além de parênteses extras ilegais (como em torno de listas de argumentos de chamada de function), uma regra geral – mas não absoluta – de C ++ é que parênteses […]

É possível evitar a alocação de pilha de um object e apenas permitir que ele seja instanciado com ‘novo’?

É possível evitar a alocação de pilha de um object e apenas permitir que ele seja instanciado com ‘new’ no heap?

FAQ: Por que o dynamic_cast só funciona se uma class tem pelo menos um método virtual?

Isso não compila em C ++: class A { }; class B : public A { }; … A *a = new B(); B *b = dynamic_cast(a);

Qual é o significado de * e & quando aplicado a nomes de variables?

Em C ++, qual é a diferença entre: void func(MyType&); // declaration //… MyType * ptr; func(*ptr); // compiler doesnt give error func(ptr); // compiler gives error i thought & represents memory address so // this statement should correct as ptr is only a pointer // or address of some real var.

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?