这段代码:
class foo
{
int x;
public:
foo(int x) : x(x) { }
int get() const { return x; }
//...
};
class bar
{
int x;
public:
bar(const foo& x) : x(x.get()) { }
int get() const { return x; }
bar& operator =(const foo& rhs) { x = rhs.get(); return *this; }
//...
};
void func()
{
foo f = 3;
bar b = 3;
b = 7;
//...
}
在线出错bar b = 3
(g++ 4.7.1 with -fstd=gnu++11
):
error: conversion from 'int' to non-scalar type 'bar' requested
但是,我提供了一个bar
构造函数,它采用foo
, 并且 ints 可以隐式转换为foo
如前面的行所示。那么,出了什么问题?
顺便说一句,出于多种原因,不希望强制转换为foo
使用foo(3)
,因为这会使我的实际代码难看使用和阅读。