调用函数时不支持间接强制转换
Is indirect casting unsupported when calling functions?
当你从A转换到B时,很容易通过构造函数和转换操作符。但是当你有一个"中间人"时,中间的第三种类型它可以与构造函数初始化一起工作,甚至可以将一种类型等同于另一种类型,但是在函数调用中传递参数似乎不起作用。
我的问题:这是c++中不支持的东西还是我错过了什么?请参阅下面代码中的3条注释。(我使用VS2015更新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++的限制,我需要这样的直接运算符,还是我错过了什么?
自动转换只完成'一步'。允许它分两步执行,不仅会使编译器的工作变得极其困难(如果不是难以管理的话)——你很快就会遇到太多的变化,而且不清楚该选择哪一个,而且还会让人类几乎无法理解发生了什么。
所以,是的,这是语言定义中的一个有意的限制。
相关文章:
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C++:用户定义的显式类型转换函数错误
- 为什么下面带有非常量转换函数的代码没有歧义?
- 为什么转换函数声明不需要至少一个定义类型说明符
- PCL:当我在setConditionFunction中使用std::bind 时,没有合适的转换函数
- C++ 通过自定义赋值运算符隐式转换函数参数
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 在C++中自动向下转换函数参数
- static_cast:转换函数模板——它们真的有效吗
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 隐式转换函数的返回对象时是否会影响性能?
- C++不存在合适的转换函数
- 为什么允许 int 和 const int 使用不同的转换函数?
- 使用转换函数直接初始化
- 为什么用户定义的转换函数模板不能有推导的返回类型?
- 为什么我会收到转换函数错误
- 选择用于赋值初始化的转换函数的优先级
- 我收到错误:没有合适的转换函数从 std::basic_istream<char、std::char_traits<char>> 到 char 存在
- 具有转换函数的 lambda,指向具有 C++ 链接的函数的指针
- 使用模板和部分专用化生成类型转换函数