C ++具有一项功能(我无法弄清楚它的正确名称),如果参数类型不是期望的参数类型,它将自动调用参数类型的匹配构造函数。
一个非常基本的示例就是调用一个std::string
带const char*
参数的函数。编译器将自动生成代码以调用适当的std::string
构造函数。
我想知道,它是否像我认为的那样对可读性不利?
这是一个例子:
class Texture {
public:
Texture(const std::string& imageFile);
};
class Renderer {
public:
void Draw(const Texture& texture);
};
Renderer renderer;
std::string path = "foo.png";
renderer.Draw(path);
这样好吗 还是太过分了?如果我不应该这样做,我可以以某种方式让Clang或GCC发出警告吗?
1
如果Draw在以后用字符串版本重载了怎么办?
—
棘轮怪胎
根据@Dave Rager的回答,我认为这不会在所有编译器上进行编译。看我对他的回答的评论。显然,根据c ++标准,您不能像这样链接隐式转换。您只能进行一次转换,而不能进行更多转换。
—
乔纳森·亨森
好的,抱歉,实际上没有编译它。更新了该示例,它仍然很可怕,IMO。
—
futlib