c – const char *,const char(&)[N]和std :: string的函数重载

c – const char *,const char(&)[N]和std :: string的函数重载,第1张

概述我想要实现的是具有适用于字符串文字和std :: string的函数重载,但是为const char *参数产生编译时错误.以下代码几乎完全符合我的要求: #include <iostream>#include <string>void foo(const char *& str) = delete;void foo(const std::string& str) { std: 我想要实现的是具有适用于字符串文字和std :: string的函数的重载,但是为const char *参数产生编译时错误.以下代码几乎完全符合我的要求:

#include <iostream>#include <string>voID foo(const char *& str) = delete;voID foo(const std::string& str) {    std::cout << "In overload for const std::string&     : " << str << std::endl;}template<size_t N>voID foo(const char (& str)[N]) {    std::cout << "In overload for array with " << N << " elements : " << str << std::endl;}   int main() {    const char* ptr = "ptr to const";    const char* const c_ptr = "const ptr to const";    const char arr[] = "const array";    std::string cppStr = "cpp string";    foo("String literal");    //foo(ptr); //<- compile time error    foo(c_ptr); //<- this should produce an error    foo(arr);   //<- this IDeally should also produce an error    foo(cppStr);}

我不高兴,它编译char数组变量,但我认为如果我想接受字符串文字(如果有,请告诉我)没有办法解决它

但是我想避免的是,std :: string重载接受const char * const变量.不幸的是,我不能只声明一个带有const char * const&的删除重载.参数,因为它也匹配字符串文字.

任何想法,我如何使foo(c_ptr)产生编译时错误而不影响其他重载?

解决方法 此代码执行所需 *** 作(除了数组 – 文字是数组,因此您无法将它们分开)

#include <cstddef>#include <string>template <class T>voID foo(const T* const & str) = delete;voID foo(const std::string& str);template<std::size_t N>voID foo(const char (& str)[N]);int main() {    const char* ptr = "ptr to const";    const char* const c_ptr = "const ptr to const";    const char arr[] = "const array";    std::string cppStr = "cpp string";    foo("String literal");    //foo(ptr); //<- compile time error    // foo(c_ptr); //<- this should produce an error    foo(arr);   //<- this IDeally should also produce an error    foo(cppStr);}
总结

以上是内存溢出为你收集整理的c – const char *,const char(&)[N]和std :: string的函数重载全部内容,希望文章能够帮你解决c – const char *,const char(&)[N]和std :: string的函数重载所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存