考虑(x | r | l | pr | gl)的值,我想到了以下问题:
考虑以下两个变量声明:
X x = ...;
和
X&& x = ...;
并假设…不传递x值.
解决方法
模板非类型参数
cannot refer to a temporary.因此,给出
struct X {}; X purr() { return {}; } X x1 = purr(); X&& x2 = purr(); template<X&> class woof {};
我们有
woof<x1> w1; // OK woof<x2> w2; // Error
如果…不限于类型X的prvalue,则切片是使两个非等效的较不模糊的方式.鉴于:
struct X { virtual ~X() = default; }; struct Y : X {}; Y meow() { return {}; }
然后:
X x1 = meow(); // slices X&& x2 = meow(); // doesn't slice
从而:
dynamic_cast<Y&>(x1); // throws std::bad_cast dynamic_cast<Y&>(x2); // OK
原文地址:https://www.jb51.cc/c/112819.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。