"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que `Class object();` não cria um objeto C++?

Por que `Class object();` não cria um objeto C++?

Publicado em 2024-12-21
Navegar:552

Why Doesn't `Class object();` Create a C   Object?

Compreendendo a ausência de invocação de construtor

Em C , construtores são usados ​​para inicializar objetos de uma classe. No entanto, no trecho de código fornecido, o construtor não está sendo invocado, resultando em um comportamento inesperado.

O problema

A linha problemática:

Class object();

na verdade não invoca o construtor para a classe Class. Em vez disso, ele declara uma função que retorna um objeto Class. Para chamar corretamente o construtor e criar um objeto, um ponto e vírgula (;) deve ser anexado à linha:

Class object;

Behind the Scenes: The Most Vexing Parse

O trecho de código inicial destaca um problema conhecido como a "análise mais incômoda" em C. Ao encontrar a linha:

Class object();

o analisador C a interpreta ambiguamente como uma declaração de função ou uma chamada de função com uma lista de argumentos vazia. Essa ambigüidade geralmente leva à confusão e a resultados inesperados.

Corrigindo o código

Para invocar o construtor e criar um objeto, o código deve ser atualizado para:

#include 
using namespace std;

class Class {
    Class() {
        cout 

Execute o código corrigido para observar a saída esperada:

default constructor called
destructor called
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3