gpt4 book ai didi

c++ - C++ 中的赋值与初始化

转载 作者:可可西里 更新时间:2023-11-01 18:06:28 27 4
gpt4 key购买 nike

我认为在 C++ 中,构造函数控制初始化,而 operator= 函数控制赋值。那么为什么这段代码有效呢?

#include <iostream>
#include <cmath>
using namespace std;

class Deg {
public:
Deg() {}
Deg(int a) : d(a) {}
void operator()(double a)
{
cout << pow(a,d) << endl;
}

private:
int d;
};

int
main(int argc, char **argv)
{
Deg d = 2;
d(5);
d = 3; /* this shouldn't work, Deg doesn't have an operator= that takes an int */
d(5);
return 0;
}

在 main 函数的第三行,我将 int 分配给 Deg 类的对象。由于我没有 operator=(int) 函数,我认为这肯定会失败...但它调用了 Deg(int a) 构造函数。那么构造函数是否也控制赋值?

最佳答案

这就是所谓的隐式类型转换。编译器将查看是否有一个构造函数可以直接从您正在分配的类型更改为您尝试分配的类型,并调用它。您可以通过在不希望被隐式调用的构造函数前添加 explicit 关键字来阻止它发生,如下所示:

显式 Deg(int a) : d(a) {}

关于c++ - C++ 中的赋值与初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303087/

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