大佬教程收集整理的这篇文章主要介绍了c – 哪种重载组合效果最好?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
void init_str(std::string _s) { std::string s{_s}; }
我希望通过允许const char *重载来避免创建临时std :: String来进行优化.
void init_str(const char* C) { std::string s{C}; }
但我也可以使用转发.
template<typename T> void init_str(T&& t) { std::string s{std::forWARD<T>(t)}; }
但编译器对重载的偏好是:
> const char *
>转发
> std :: String
那么我更喜欢什么样的超载组合?
void init_str(std::string s) { // just use s }
因为复制省略将确保根本不构建不必要的临时.
这使用std :: String(const char *)构造函数构造s(总共1个构造):
init_str("xxx");
std::string x; // 1 constructor init_str(X); // 1 copy constructor
这用构造函数构造了s
std::string x; // 1 constuctor init_str(std::move(X)); // 1 move constructor
这根本不会创建临时的:
std::string get_str() { std::string s("xxx"); // 1 constructor,but... return s; // ...because of RVO it's constructed at the call site } init_str(get_str()); // ... which is actually the constructor of s in init_str's arg list // ... @R_214_10586@l constructors: 1
以上是大佬教程为你收集整理的c – 哪种重载组合效果最好?全部内容,希望文章能够帮你解决c – 哪种重载组合效果最好?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。