es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si “initialización designada” es una característica de C++20, ¿por qué se compila el siguiente código con las opciones dadas?

Según mi conocimiento, la “inicialización designada” es una característica de C++20 (ref: https://en.cppreference.com/w/cpp/language/aggregate_initialization).

Sin embargo, el siguiente código,

// main.cc

#include <iostream>

struct Person
{
  const char *name;
  int age;
};

int main(int argc, char *argv[])
{
  Person person = {
      .name = "Bob",
      .age = 24,
  };
  std::cout << person.name << "\n"
            << person.age << "\n";
  return 0;
}

compila con el comando g++ -Wall -Werror -std=c++11 -o main main.cc (también std=c++17).

¿Por qué es esto?

Mi g++ --version:

g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Aunque el inicializador designado es oficialmente una característica de C++20, algunos compiladores (incluyendo g++) lo han admitido como una extensión del lenguaje desde hace un tiempo. En este caso, g++ permite el uso de inicializadores designados como una extensión a C++11/17. Esto significa que el código que utiliza inicializadores designados podría ser compilado con g++ utilizando las banderas apropiadas, aunque no formaran parte del estándar oficial hasta C++20.

Comments are closed.