没有调用右值构造函数?

加梅凯恩

我有这个结构

struct A {
    A()             { cout << "Default\n"; }
    A(const A& a)   { cout << "Const lvalue\n"; }
    A(const A&& a)  { cout << "Const rvalue\n"; }
    A(A& a)         { cout << "Lvalue\n"; }
    A(A&& a)        { cout << "Rvalue\n"; }
};

我用来理解右值/左值。

做的时候

A a1;
A a2{ a1 };

const A a3;
A a4{ a3 };

它正确输出

> Default
> lvalue
> Default
> Const lvalue

问题是当我做类似的事情时

A a{ A() };

输出为Default但是A()那里不是右值吗?不应该A::A(A&&)A::A(const A&&)必须被调用?这里发生了什么?

格子羊驼

你没有看到Rvalue打印,因为编译器eliding移动。即使构造函数有副作用,这也是允许的

如果您传递-fno-elide-constructors给 GCC 或 Clang,那么您将看到输出:

clang++ -std=c++14 -O2 -pedantic -fno-elide-constructors main.cpp && ./a.out
Default
Rvalue

clang++ -std=c++14 -O2 -pedantic main.cpp && ./a.out
Default

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?

来自分类Dev

构造函数没有被调用

来自分类Dev

调用没有输出的构造函数

来自分类Dev

没有调用C ++默认构造函数

来自分类Dev

没有调用C ++默认构造函数

来自分类Dev

从构造函数调用值

来自分类Dev

调用没有对象或传递值的函数

来自分类Dev

调用没有硬编码参数的构造函数(耦合)

来自分类Dev

没有调用C ++模板化静态成员构造函数

来自分类Dev

没有调用多个共享库构造函数

来自分类Dev

没有错误:未调用PDO构造函数

来自分类Dev

没有按预期方式调用复制构造函数

来自分类Dev

为什么我的子类构造函数没有被调用?

来自分类Dev

为什么我的 additionalChoices 构造函数没有被调用?

来自分类Dev

为什么没有调用 Cups 类的构造函数?

来自分类Dev

在屏幕之间导航但构造函数没有调用

来自分类Dev

意外错误“没有匹配的函数可调用”,期望构造函数没有参数

来自分类Dev

JavaScript 构造函数没有设置正确的值

来自分类Dev

构造函数没有初始化正确的值

来自分类Dev

具有左值和右值的可变参数模板类构造函数

来自分类Dev

有构造函数的类和没有调用函数的类之间的区别?

来自分类Dev

没有匹配函数可调用带有参考参数的构造函数

来自分类Dev

有构造函数的类和没有调用函数的类之间的区别?

来自分类Dev

没有定义的构造函数

来自分类Dev

没有默认的构造函数

来自分类Dev

函数没有被调用

来自分类Dev

具有右值引用成员的泛型复制构造函数

来自分类Dev

您如何称呼带有右值引用参数的构造函数?

来自分类Dev

错误:没有匹配函数可调用默认副本构造函数?

Related 相关文章

热门标签

归档