Perguntas com a marcação «c++»

89
stdcall e cdecl

Existem (entre outros) dois tipos de convenções de chamada - stdcall e cdecl . Eu tenho algumas perguntas sobre eles: Quando uma função cdecl é chamada, como um chamador sabe se ela deve liberar a pilha? No local da chamada, o chamador sabe se a função que está sendo chamada é cdecl ou uma...

89
GNU GCC (g ++): Por que ele gera vários dtors?

Ambiente de desenvolvimento: GNU GCC (g ++) 4.1.2 Enquanto estou tentando investigar como aumentar a 'cobertura de código - particularmente a cobertura de função' em testes de unidade, descobri que parte da classe dtor parece ser gerada várias vezes. Alguns de vocês têm ideia do porquê, por...

89
O que seria 'std :;' fazer em c ++?

Recentemente, estava modificando algum código e encontrei um bug pré-existente em uma linha de uma função: std:;string x = y; Este código ainda é compilado e está funcionando conforme o esperado. A definição da string funciona porque esse arquivo é using namespace std;, portanto, std::era...

89
Callback C ++ usando um membro da classe

Sei que isso foi perguntado tantas vezes e, por causa disso, é difícil cavar no meio do nada e encontrar um exemplo simples do que funciona. Eu tenho isso, é simples e funciona para MyClass... #include <iostream> using std::cout; using std::endl; class MyClass { public: MyClass();...

89
O que exatamente é a regra “como se”?

Como diz o título, O que exatamente é a regra "como se"? Uma resposta típica que se obteria é: A regra que permite toda e qualquer transformação de código que não altere o comportamento observável do programa De vez em quando, continuamos obtendo comportamentos de certas...

89
Acesse o campo privado de outro objeto na mesma classe

class Person { private BankAccount account; Person(BankAccount account) { this.account = account; } public Person someMethod(Person person) { //Why accessing private field is possible? BankAccount a = person.account; } } Por favor, esqueça o design. Eu sei que OOP especifica que...

89
Como fazer um typedef condicional em C ++

Estou tentando fazer algo assim: #include <iostream> #include <random> typedef int Integer; #if sizeof(Integer) <= 4 typedef std::mt19937 Engine; #else typedef std::mt19937_64 Engine; #endif int main() { std::cout << sizeof(Integer) << std::endl; return...

89
Por que memmove é mais rápido que memcpy?

Estou investigando pontos de acesso de desempenho em um aplicativo que gasta 50% do tempo no memmove (3). O aplicativo insere milhões de inteiros de 4 bytes em matrizes classificadas e usa memmove para deslocar os dados "para a direita" a fim de liberar espaço para o valor inserido. Minha...

89
Confusão de inicialização padrão, valor e zero

Estou muito confuso sobre a inicialização de valor e padrão e zero. e especialmente quando eles são iniciados para os diferentes padrões C ++ 03 e C ++ 11 (e C ++ 14 ). Estou citando e tentando estender uma resposta realmente boa Valor- / Padrão- / Zero- Init C ++ 98 e C ++ 03 aqui para torná-lo...

89
Por que um lambda tem o tamanho de 1 byte?

Estou trabalhando com a memória de alguns lambdas em C ++, mas estou um pouco confuso com o tamanho deles. Aqui está meu código de teste: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout...

89
Por que o caractere 'A' seria comparado com 0x41?

Eu estava olhando um código C ++ e encontrei a seguinte construção: if('A' == 0x41) { // ... } else if('A' == 0xc1) { // ... } else { // ... } Recebo um aviso do Visual Studio dizendo: Aviso C4127 expressão condicional é constante. O Visual Studio está claramente certo - certamente 'A'...

89
Alguma razão para não usar lambdas globais?

Tínhamos uma função que usava um lambda não captador interno para si mesmo, por exemplo: void foo() { auto bar = [](int a, int b){ return a + b; } // code using bar(x,y) a bunch of times } Agora, a funcionalidade implementada pelo lambda tornou-se necessária em outro lugar, por isso vou elevar...

88
Converter um ponteiro em um inteiro

Estou tentando adaptar um código existente a uma máquina de 64 bits. O principal problema é que em uma função, o codificador anterior usa um argumento void * que é convertido em um tipo adequado na própria função. Um pequeno exemplo: void function(MESSAGE_ID id, void* param) { if(id == FOO) {...