对需要const引用的函数的整数输入

时间:2014-07-20 15:25:38

标签: c++ reference const

我不知道之前是否有类似的问题,但我不知道如何搜索它,如果你给我一个链接,欢迎重复标签:)

所以我问:

#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引用,调用构造函数等?

感谢。

1 个答案:

答案 0 :(得分:7)

H有一个隐式转换构造函数,允许它从这样的int构造:

H h = 42;

当您将15传递给func1时,会通过调用H创建一个临时H(15)对象。该临时用于该功能。在C ++中,可以将临时对象绑定到const引用。

如果您想禁止这些隐式转换,请创建构造函数explicit

explicit H(int x = 0) { ... }