具有多个中间转换步骤的隐式转换

时间:2017-09-19 18:51:22

标签: c++ type-conversion

我想天气可以在C ++中让编译器推断从一种起始类型到目标类型的一系列转换?在下面的示例中,有一个隐式转换

  • class aclass b
  • class bcont char *

然而,编译器似乎没有尝试推断隐含的转换,这意味着多个转换步骤,在下面的示例中从class aconst char *。在下面的示例中,cout << x将返回错误。

/*g++ -g -std=c++14 file.cpp -o file.exe
 * file.cpp:
 */

#include <stdio.h>
#include <iostream>
#include <string>

class b {
public:
  b(const char *n) : n(n) {};
  operator const char *() const {
    return n;
  }
  const char *n;
};

class a {
public:
  a(const char *n) : n(n) {};
  operator b() const {
    return b(n);
  }
  const char *n;
};

int main(int argc, char **argv) {
  a x("hello");
  b y = x;
  std::string z = (const char*)y;
  std::cout << y;
  std::cout << (b)x;
  //std::cout << x; would fail                                                                                                                                                                                                                                            
  return 0;
}

0 个答案:

没有答案