加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – \u0026\u0026宣告的变量

发布时间:2020-12-16 02:58:55 所属栏目:百科 来源:网络整理
导读:考虑(x | r | l | pr | gl)的值,我想到了以下问题: 考虑以下两个变量声明: X x = ...; 和 X x = ...; 并假设…不传递x值. 有人会想到代码不使用decltype,这在哪里有所区别?在这两种情况下,(x)将以类型X的左值为单位,不会吗? 解决方法 模板非类型参数 can
考虑(x | r | l | pr | gl)的值,我想到了以下问题:

考虑以下两个变量声明:

X x = ...;

X&& x = ...;

并假设…不传递x值.

有人会想到代码不使用decltype,这在哪里有所区别?在这两种情况下,(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读