c++ - 为什么在应该返回对象的方法中返回 int 有效?

标签 c++

如果方法应该返回 B 类型的对象,为什么在方法 B minus 中返回 int 会起作用?

#include <iostream>

class B
{
public:
    int a;
public:
    B(int i=0)
    {
        a=i;
    }
    B minus()
    {
        return (1-a);
    }
};

int main()
{
    B x(18);
    x = x.minus();
    std::cout << x.a << '\n';
    return 0;
}

最佳答案

具有单个参数的构造函数被视为转换构造函数。当需要 X 类型的参数并给出 Y 类型时,编译器将查找从 Y 到 X 的转换构造函数(或类型转换运算符)。在这种情况下,它会使用您的 B 找到一个(int) 构造函数。本质上,您的 return (1-a); 更改为 return B(1-a);.

正如在其他几个(也是正确的)答案中提到的,如果您不希望构造函数被视为转换构造函数,则应在其前面加上 explicit 关键字。

关于c++ - 为什么在应该返回对象的方法中返回 int 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663521/

相关文章:

c++ - 在 C++ 中继承私有(private)成员

c++ - CMakelists.txt 使 windows 和 mac 工作起来非常复杂,有没有更好的方法?

c++ - c++线程中的notify_one()唤醒多个线程

c++ - MATLAB Coder hello world 从头到尾

c++ - 智能感知 : Cannot open source file "enum.h"

c++ - 无法让 Ocean Optics OmniDriver 工作

c++ - 简单的服务器/客户端 boost 示例不起作用

python - Pybind11:带有 lambda 的 init<>

c++ - Boost 测试框架是否支持测试依赖?

c++ - 用于将 C++ 头文件与其基础文件进行比较的开源实用程序