大佬教程收集整理的这篇文章主要介绍了c – 使用隐式转换运算符返回const引用的类上的static_cast <>行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <String> class Text { private: std::string _text; public: Text(std::string&& text) : _text(std::move(text)) { } operator const std::string&() const { return _text; } };
我的问题是:如果我想获得一个const std :: String& ;,我可以这样做而不会受到任何惩罚:
@R_942_3801@("fred"); auto& s = static_cast<std::string>(text);
或者这会构造一个中间的std :: String,我最终会得到一个引用?这种情况是否有标准方法?我是C的新手.
@H_301_10@但是,如果你打电话的话
auto& s = static_cast<const std::string&>(text);
,那么你将正确地调用显式转换运算符操作符const Noisy&().
我们来试试吧
struct Noisy { Noisy() { std::cout << "Default construct" << std::endl; } Noisy(const Noisy&) { std::cout << "Copy construct" << std::endl; } Noisy(Noisy&&) { std::cout << "Move construct" << std::endl; } Noisy& operator=(const Noisy&) { std::cout << "C-assign" << std::endl; return *this; } Noisy& operator=(Noisy&&) { std::cout << "M-assign" << std::endl; return *this; } ~Noisy() { std::cout << "Destructor" << std::endl; } }; class Text { public: Text(Noisy&& text) : _text(std::move(text)) {} operator const Noisy&() const { return _text; } private: Noisy _text; };
测试1
int main() { @R_942_3801@(Noisy{}); const auto& s = static_cast<Noisy>(text); // Needs 'const' to bind to temporary. }
测试2
int main() { @R_942_3801@(Noisy{}); auto& s = static_cast<const Noisy&>(text); }
注意:使用选项-fno-elide-constructors编译以避免复制省略优化.
@H_301_10@ @H_301_10@以上是大佬教程为你收集整理的c – 使用隐式转换运算符返回const引用的类上的static_cast <>行为全部内容,希望文章能够帮你解决c – 使用隐式转换运算符返回const引用的类上的static_cast <>行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。