我不知道之前是否有类似的问题,但我不知道如何搜索它,如果你给我一个链接,欢迎重复标签:)
所以我问:
#include <iostream>
class H
{
public:
H(int x = 0)
{
std::cout << "constructor";
}
};
void func1(const H &a1)
{
}
int main()
{
func1(15);
return 0;
}
你能解释一下这里发生了什么吗?为什么它接受int值作为const引用,调用构造函数等?
感谢。
答案 0 :(得分:7)
H
有一个隐式转换构造函数,允许它从这样的int构造:
H h = 42;
当您将15
传递给func1
时,会通过调用H
创建一个临时H(15)
对象。该临时用于该功能。在C ++中,可以将临时对象绑定到const
引用。
如果您想禁止这些隐式转换,请创建构造函数explicit
:
explicit H(int x = 0) { ... }