琐碎c++1

编程入门 行业动态 更新时间:2024-10-27 06:29:29

<a href=https://www.elefans.com/category/jswz/34/1706235.html style=琐碎c++1"/>

琐碎c++1

继上一篇琐碎c++足部整理在c++中遇到有意思的应用(自己感觉c++的程序原脑子都态他妈好了,这样的应用都能想出来)

关于c++11中的线程

void fun(string const& t1);
void oops(int some_param)
{std::thread t(fun, "hello");t.detach();
}
  • 在std::thread(fun,string)中由于fun(string const t1)中参数是string类型的,但是你想直接像std::thread(fun,”hello”),这样的方式调用的话,可能会发生意想不到问题(原因:“hello”其实是const char *类型的,当本地const char *传递到新的线程中,函数有可能在转化为string对象完成之前奔溃,这样就会导致一些未定义的行为),这时候就需要显示的转化,如下
void fun(string const& t1);
void oops(int some_param)
{std::thread t(fun, std::string("hello"));t.detach();
}
  • 如上的转化在需要传引用的时候也是有必要的(即使你的回调函数的参数是应用类型)!引用的显示转化代码如下:
std::ref(data);

关于Rcalue和Lvalue Reference的重载规则

  • 如果你只实现void foo(X&);而没有实现void foo(X&&);
    行为如同c++98;foo()可因lvalue但不可因rvalue被调用。
  • 实现:void foo(const X&);
    未实现:void foo(X&&);
    行为:如同c++98,foo()可因lvalue也可因rvalue被调用。
  • 实现:void foo(X&); void foo(X&&); 或者
    void foo(const X&); void foo(X&&);
    行为:你可以区分“为rvalue服务”和“为lvalue服务”的版本被允许且应该提供move语义。也就是说,它可以“偷取”实参的内部状态和资源。
  • 实现:void foo(X&&);
    未实现:void foo(X&&); void foo(const X&);
    行为:foo()可因rvalue被调用,但是当你尝试以lvalue调用它,会触发编译错误。因此,这里只提供move()语义。

更多推荐

琐碎c++1

本文发布于:2024-02-26 07:12:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701704.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:琐碎

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!