gpt4 book ai didi

c++ - 默认构造函数的不同声明的链接器错误

转载 作者:太空狗 更新时间:2023-10-29 20:01:56 26 4
gpt4 key购买 nike

我一直在尝试使用默认构造函数并注意到一个奇怪的行为(从我的角度来看)。

当我声明 A() = default 时,我没有收到链接器错误。

struct A
{
int a;
A() = default;
};

A a; // no linker error

但是,当我声明 A(); 时,我明白了。

struct A
{
int a;
A();
};

A a; // linker error - undefined reference to `A::A()`

问题:

  1. 两者有什么区别?

  2. 如果 A(); 产生链接器错误,为什么首先要支持它?有实际应用吗?

更新(跟进问题)

对于A();,如果用户没有指定定义,为什么编译器不能隐式定义它?

最佳答案

在第一种情况下,编译器自己定义了构造函数。考虑到在第一种情况下,构造函数声明与其定义相同。

在第二种情况下,由于构造函数是用户定义的构造函数,因此必须由用户定义构造函数。在第二种情况下,只有构造函数的声明。

考虑到您可以声明一个构造函数,然后使用说明符 default 定义它。

例如

#include <iostream>

struct A
{
int a;
A();
};

A::A() = default;

int main()
{
A a;

return 0;
}

关于c++ - 默认构造函数的不同声明的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com