Perguntas com a marcação «language-lawyer»

Para perguntas sobre os meandros das especificações formais ou oficiais das linguagens e ambientes de programação.



1
O uso de reinterpret_cast em um buffer de memória UB?
Dado o código struct A {}; auto obj = new A; std::vector<unsigned char> buffer; buffer.resize(sizeof(obj)); std::memcpy(buffer.data(), &obj, sizeof(obj)); // this copies the pointer, not the object! // ... auto ptr = *reinterpret_cast<A**>(buffer.data()); // is this UB? delete ptr; é o uso de reinterpret_cast, neste caso, UB? Eu diria que sim, …



2
Por que uma string vazia literal em uma matriz multidimensional decai para um ponteiro nulo?
Eu quero definir uma matriz multidimensional de string C, inicializada por vários literais de string. Em C, eu faria o seguinte: #include <stdio.h> const char *strArr[2][1] = { {"foo"}, {""}}; int main(void) { printf("%p\t%p\n", strArr[0][0], strArr[1][0]); return 0; } Compilando gcc -std=c18 -pedantic test.ce executando resultados em: $ ./a.out 0x55d95410f004 …

1
Um compilador pode colocar a implementação de um destruidor virtual declarado implicitamente em uma única unidade de tradução separada?
O código a seguir compila e vincula com Visual Studio(2017 e 2019 com /permissive-), mas não compila com gccou clang. foo.h #include <memory> struct Base { virtual ~Base() = default; // (1) }; struct Foo : public Base { Foo(); // (2) struct Bar; std::unique_ptr<Bar> bar_; }; foo.cpp #include "foo.h" …


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.