小编Ant*_*nin的帖子

C++ 11静态转换为右值引用

我的一个朋友在一个项目中写了一些类似的代码:

struct A {
  int x{0};
};

struct B : public A {
  int y{1};
};

int main() {
  A a;
  B b = static_cast<B &&>(a);
}
Run Code Online (Sandbox Code Playgroud)

IMO,这段代码显然存在缺陷,我通过尝试b.y在Valgrind(报告内存错误)下访问和运行程序来确认它.我不明白为什么这甚至编译(我使用的是g ++ 4.9.3).我实际上期待一条错误信息no matching function for call to B::B(A &&).如果这是一个愚蠢的评论,我道歉,但它与写作有什么不同B b = static_cast<B>(a)- 这确实给我一个编译错误?我看到的唯一区别是复制ABvs移动AB,这两个都是未定义的.

static-cast rvalue-reference c++11

4
推荐指数
1
解决办法
263
查看次数

标签 统计

c++11 ×1

rvalue-reference ×1

static-cast ×1