#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的函数重载所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)