C++ : Understanding implicit typecasting for classes with a constructor with 1 argument
本问题已经有最佳答案,请猛点这里访问。
如果一个构造函数只有一个参数,并且据说它对类类型进行了隐式强制转换,那么我会很高兴对它进行澄清,因为:
1 2 3 4 5 6 | class dog { public : dog(string name) { mname = name;} private : string mname; }; |
我不理解如何将类型字符串转换为类型狗,我可以看到如何将其传入并设置另一个字符串,但如果将字符串转换为类型狗,这意味着什么?会不会是类型dog被分配了一个字符串的位拷贝?
如果你有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> #include <string> class dog { public: dog(std::string name) : mname(name) {} // use initializer list private: std::string mname; }; void Foo(dog g) {} int main() { std::string name ="fido"; Foo(name); } |
LIve示例
这是在做一个比较有趣的事情,你称之为
这就是所谓的隐式类型转换。我们可以通过将构造函数标记为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> #include <string> class dog { public: explicit dog(std::string name) : mname(name) {} // use initializer list private: std::string mname; }; void Foo(dog g) {} int main() { std::string name ="fido"; Foo(name); } |
LIve示例
现在编译器经历了相同的步骤,但它不能使用构造函数,因此您将得到一个编译器错误。现在,如果我们想要转换,我们必须手动进行如下操作:
1 | Foo(dog(name)); |