是否重新创建对象/引用/指针以添加const

乔纳森·米

给定代码:

template<typename T>
void foo(const T){}

当我执行以下操作时,幕后实际上发生了什么:

int main(){
    string a;
    string* pA = &a;

    foo(string("test"));
    foo(ref(A));
    foo(pA);

    return 0;
}

是否foo获得这些对象的副本const还是foo现在正在引用该对象但无法更改内容?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

当您的函数按值获取参数时,它将获得一个副本。常数不起作用。

foo(string("test"))

在这种情况下,将创建一个临时对象。如果您的编译器应用Return Value Optimization,则将“就地”创建参数的值。换句话说,将只存在一个构造函数调用std::string("test"),而不是复制函数构造函数调用,然后是临时构造函数的析构函数调用,而没有构造函数调用。

foo(rA);

在这种情况下,新std::string会使用拷贝构造函数,复制的内容被创建arA是一个参考。

foo(ref(A));

在这种情况下,std::reference_wrapper<std::string>将创建一个临时实例再次,返回值优化将确保它是就地创建的,而不是被复制。

foo(pA);

在这种情况下,指针的复制方式与按值传递指针时复制指针的方式相同。指针的值不会改变(demo)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

定期重新创建对象

来自分类Dev

dart:是否可以缓存或重新创建在重复函数中创建的对象?

来自分类Dev

javascript的此对象是否以我认为的方式引用新创建的对象

来自分类Dev

重新创建了VG。是否可以向其中添加现有的LV?

来自分类Dev

是否可以在 close() 之后重新创建 Java BufferedReader 对象

来自分类Dev

重新创建为对象和类PHP

来自分类Dev

Java:删除并重新创建对象

来自分类Dev

多重处理不会重新创建对象

来自分类Dev

在导航上重新创建Blazor单例对象

来自分类Dev

做出决定时,Starling重新创建新对象

来自分类Dev

在dispose()调用之后重新创建JinternalFrame对象

来自分类Dev

重新创建为对象和类PHP

来自分类Dev

Java:删除并重新创建对象

来自分类Dev

尝试重新创建我的console.log对象

来自分类Dev

每帧重新创建FBO(帧缓冲对象)

来自分类Dev

QCursor是否可以从QPixmaps重新创建泄漏内存?

来自分类Dev

重新创建的活动是否还记得最初的意图?

来自分类Dev

是否可以忽略git中的文件重新创建?

来自分类Dev

是否可以重新创建.meteor目录?

来自分类Dev

是否可以从javascript重新创建选择?

来自分类Dev

如何使用FormView引用新创建的对象

来自分类Dev

重新创建序列

来自分类Dev

C ++如何向地图添加对象并返回对地图内部新创建对象的引用

来自分类Dev

自动将新创建的对象添加到列表

来自分类Dev

重新创建已创建的片段?

来自分类Dev

生命周期结束后,重新创建一个新对象,bass类的非静态数据成员的类型为引用类型,这是否定义明确?

来自分类Dev

C++,用指针和运算符地址重新创建 memset

来自分类Dev

iOS Swift:如何检查对象是否存在于数组中,以便我不将其添加到它中,或使用它重新创建一个GMSMarker?

来自分类Dev

FullCalendar:如何重新创建/重新初始化FullCalendar或批量添加多个事件

Related 相关文章

  1. 1

    定期重新创建对象

  2. 2

    dart:是否可以缓存或重新创建在重复函数中创建的对象?

  3. 3

    javascript的此对象是否以我认为的方式引用新创建的对象

  4. 4

    重新创建了VG。是否可以向其中添加现有的LV?

  5. 5

    是否可以在 close() 之后重新创建 Java BufferedReader 对象

  6. 6

    重新创建为对象和类PHP

  7. 7

    Java:删除并重新创建对象

  8. 8

    多重处理不会重新创建对象

  9. 9

    在导航上重新创建Blazor单例对象

  10. 10

    做出决定时,Starling重新创建新对象

  11. 11

    在dispose()调用之后重新创建JinternalFrame对象

  12. 12

    重新创建为对象和类PHP

  13. 13

    Java:删除并重新创建对象

  14. 14

    尝试重新创建我的console.log对象

  15. 15

    每帧重新创建FBO(帧缓冲对象)

  16. 16

    QCursor是否可以从QPixmaps重新创建泄漏内存?

  17. 17

    重新创建的活动是否还记得最初的意图?

  18. 18

    是否可以忽略git中的文件重新创建?

  19. 19

    是否可以重新创建.meteor目录?

  20. 20

    是否可以从javascript重新创建选择?

  21. 21

    如何使用FormView引用新创建的对象

  22. 22

    重新创建序列

  23. 23

    C ++如何向地图添加对象并返回对地图内部新创建对象的引用

  24. 24

    自动将新创建的对象添加到列表

  25. 25

    重新创建已创建的片段?

  26. 26

    生命周期结束后,重新创建一个新对象,bass类的非静态数据成员的类型为引用类型,这是否定义明确?

  27. 27

    C++,用指针和运算符地址重新创建 memset

  28. 28

    iOS Swift:如何检查对象是否存在于数组中,以便我不将其添加到它中,或使用它重新创建一个GMSMarker?

  29. 29

    FullCalendar:如何重新创建/重新初始化FullCalendar或批量添加多个事件

热门标签

归档