Articles of language lawyer

As ramificações com comportamento indefinido podem ser consideradas inalcançáveis ​​e otimizadas como código morto?

Considere a seguinte declaração: *((char*)NULL) = 0; //undefined behavior Ele claramente invoca um comportamento indefinido. A existência de tal declaração em um determinado programa significa que o programa inteiro é indefinido ou que o comportamento só se torna indefinido quando o stream de controle atinge essa instrução? O programa a seguir seria bem definido caso […]

É o comportamento indefinido sizeof (* ptr) ao apontar para uma memory inválida?

Nós todos sabemos que desreferenciando um ponteiro nulo ou um ponteiro para a memory não alocada invoca o comportamento indefinido. Mas qual é a regra quando usada dentro de uma expressão passada para sizeof ? Por exemplo: int *ptr = 0; int size = sizeof(*ptr); Isso também é indefinido?

Conceito “inline” palavra-chave vs “inlining”

Estou fazendo essa pergunta básica para corrigir os registros. Já referiu esta questão e sua resposta aceita atualmente , o que não é convincente. No entanto, a segunda resposta mais votada dá uma melhor visão, mas também não é perfeita. Ao ler abaixo, faça uma distinção entre a palavra – chave inline e o conceito […]

Por que a inferência de tipos genéricos do Java 8 seleciona essa sobrecarga?

Considere o seguinte programa: public class GenericTypeInference { public static void main(String[] args) { print(new SillyGenericWrapper().get()); } private static void print(Object object) { System.out.println(“Object”); } private static void print(String string) { System.out.println(“String”); } public static class SillyGenericWrapper { public T get() { return null; } } } Imprime “String” no Java 8 e “Object” no […]

É um ponteiro com o endereço certo e digite ainda sempre um ponteiro válido desde C ++ 17?

(Em referência a esta pergunta e resposta .) Antes do padrão C ++ 17, a seguinte frase foi incluída em [basic.compound] / 3 : Se um object do tipo T está localizado em um endereço A, um ponteiro do tipo c * T * cujo valor é o endereço A é dito apontar para esse […]

Typedefs repetidos – inválidos em C mas válidos em C ++?

Eu gostaria de uma referência padrão porque o código a seguir desencadeia um aviso de conformidade em C (testado com gcc -pedantic ; “redefinição typedef“), mas está bem em C ++ ( g++ -pedantic ): typedef struct Foo Foo; typedef struct Foo Foo; int main() { return 0; } Por que não posso definir um […]

Ainda é seguro excluir nullptr em c ++ 0x?

Em c++03 , é bastante claro que a exclusão de um ponteiro nulo não tem efeito. De fato, é explicitamente declarado em §5.3.5/2 que: Em qualquer alternativa, se o valor do operando de exclusão for o ponteiro nulo, a operação não terá efeito. No entanto, no atual rascunho para o c++0x esta sentença parece estar […]

static_assert dependente do parâmetro de modelo não-tipo (comportamento diferente no gcc e clang)

template struct Hitchhiker { static_assert(sizeof(answer) != sizeof(answer), “Invalid answer”); }; template struct Hitchhiker {}; Ao tentar desativar a instanciação geral de modelo com static_assert , descobri que o código acima no clang gera o erro assert, mesmo quando o modelo não é instanciado, enquanto o gcc gera o erro assert apenas ao instanciar o Hitchhiker […]

O que o padrão diz sobre como chamar claro um vetor muda a capacidade?

Este site implica que a limpeza de um vetor pode alterar a capacidade: http://en.cppreference.com/w/cpp/container/vector/clear Muitas implementações não liberam a memory alocada depois de uma chamada para clear (), deixando efetivamente a capacidade () do vetor inalterada. Mas, de acordo com o @JamesKanze, isto está errado e os mandatos normais que são claros não irão alterar […]

O printf (“% x”, 1) invoca um comportamento indefinido?

De acordo com o padrão C (6.5.2.2, parágrafo 6) Se a expressão que denota a function chamada tiver um tipo que não inclui um protótipo, as promoções de inteiros serão executadas em cada argumento e os argumentos que tiverem o tipo float serão promovidos para o dobro. Essas são chamadas de promoções de argumento padrão. […]