C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 数组衰减到指针和重载决策大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够在重载分辨率中区分数组和指针:

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]);
};

大佬总结

以上是大佬教程为你收集整理的c – 数组衰减到指针和重载决策全部内容,希望文章能够帮你解决c – 数组衰减到指针和重载决策所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。