c – 重载char *和std :: string是否安全?
发布时间:2020-12-16 09:53:20 所属栏目:百科 来源:网络整理
导读:我刚刚读过初学者书中的重载函数. 出于好奇,我想问一下char *和std :: string之间的重载是否安全. 我玩下面的代码并获得一些结果.但我不确定它是否是一种未定义的行为. void foo(std::string str) { cout "This is the std::string version. " endl;}void fo
我刚刚读过初学者书中的重载函数.
出于好奇,我想问一下char *和std :: string之间的重载是否安全. 我玩下面的代码并获得一些结果.但我不确定它是否是一种未定义的行为. void foo(std::string str) { cout << "This is the std::string version. " << endl; } void foo(char* str) { cout << "This is the char* version. " << endl; } int main(int argc,char *argv[]) { foo("Hello"); // result shows char* version is invoked std::string s = "Hello"; foo(s); // result shows std::string version return 0; } 解决方法
是的,它是安全的,只要你使它成为const char *,并且实际上通常很有用.自C 11以来,字符串文字无法转换为char *(之前已弃用).
将为字符串文字选择const char *重载,因为字符串文字是const char [N](其中N是字符数).重载具有一种优先级排序,当多个工作时,将对其进行选择.与构造std :: string相比,它被认为是执行数组到指针转换的更好匹配. 为什么重载std :: string和const char *会有用?例如,如果你有一个std :: string的重载和一个bool的重载,那么当你传递一个字符串文字时会调用bool.那是因为bool重载仍然被认为是比构造std :: string更好的匹配.我们可以通过提供一个const char *重载来解决这个问题,它将超过bool重载,并且可以转发到std :: string重载. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |