c – 数组衰减到指针和重载决策
发布时间:2020-12-16 06:52:46 所属栏目:百科 来源:网络整理
导读:我希望能够在重载分辨率中区分数组和指针: class string {public: string(const char* c_str); templateint N string(const char (str) [N]);};int main() { const char* c_str = "foo"; string foo(c_str); // ok will call string(const char*) string ba
我希望能够在重载分辨率中区分数组和指针:
class string { public: string(const char* c_str); template<int N> string(const char (&str) [N]); }; int main() { const char* c_str = "foo"; string foo(c_str); // ok will call string(const char*) string bar("bar"); // call string(const char*) instead of the array version } 到目前为止我发现的最好的是使用指针的引用而不是指针: class string { public: string(const char*& c_str); template<int N> string(const char (&str) [N]); }; int main() { const char* c_str = "foo"; string foo(c_str); // ok will call string(const char*) string bar("bar"); // ok,will call the array version } 它不是完全相同的东西,我想知道是否存在更好的方法 解决方法
当两者都可行时,你需要使第一个过载成为较差的选择.目前它们与转换排名相关(两者都是“完全匹配”),然后由于非模板是首选,因此打破了平局.
这应该使转换排名更差: struct stg { struct cvt { const char* p; cvt(const char* p_p) : p(p_p) {} }; // matches const char*,but disfavored in overload ranking stg(cvt c_str); // use c_str.p inside :( Or add an implicit conversion template<int N> stg(const char (&str) [N]); }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |