c++ - 调用函数时是否不支持间接转换?

标签 c++ parameter-passing

当您从 A 转换为 B 时,通过构造函数和转换运算符很容易。但是当你有一个“中间人”时,它与构造函数初始化之间的第三种类型一起工作,甚至当将一种类型与另一种类型等同时,但在函数调用中传递参数似乎不起作用。

我的问题:它是 C++ 中不受支持的东西还是我遗漏了什么?在下面的代码中查看我的 3 条评论。 (我使用的是 VS2015 update 3 的编译器)

class StringOut
{
public:
    char* ptr = nullptr;
    StringOut() {}
    operator char*() { return ptr; }
};

class StringIn
{
public:
    char* ptr = nullptr;
    StringIn() {}
    StringIn(char* ptr) { StringIn::ptr = ptr; }
    void operator=(char* ptr) { StringIn::ptr = ptr; }
    //StringIn(StringOut& ptr) { StringIn::ptr = ptr.ptr; }
};

void ff1(StringIn strin)
{

}

void ff1(int a)
{

}

void ff()
{
    StringOut strout;
    StringIn strin = strout; // compiles
    strin = strout; // compiles

    ff1(strout); // doesn't compile
};

当然,如果我使用注释掉的代码,我会工作。但我的问题是,我是否需要这样的直接运算符是 C++ 的局限性,还是我错过了什么?

最佳答案

自动转换仅“一步”完成。允许它执行两步操作不仅会使编译器的工作变得极其困难,甚至难以管理 - 您很快就会遇到太多的变体,并且不清楚该选择哪一个,而且还会使人们几乎无法理解所发生的事情。

所以是的,这是语言定义中的有意限制。

关于c++ - 调用函数时是否不支持间接转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39049490/

相关文章:

c++ - OpenSSL和JSON文件加解密

c++ - 在另一个函数中初始化一个类

javascript - 将参数传递给 BLOB 对象 URL

bash - sshing时传递bash变量

c++ - 将指针作为参数传递给函数

c++ - C++ 中的 "new"关键字有什么问题?

r - 如何将Shell变量引入R脚本?

jsp include,转发请求参数

c++ - 创建的窗口没有标题

c++ - 从 C++ 中用户定义数据类型的 vector 中删除元素