社区
C++ 语言
帖子详情
C++的线程不能改变引用参数的值吗
Mr-Luer
2017-12-27 12:41:10
下面程序的输出结果是0,不解,不应该是1吗
void fun(int &a)
{
a =1 ;
}
int main()
{
int a =0 ;
std::thread t(fun,a) ;
t.join () ;
Sleep(1000) ;
cout<<a<<endl ;
return 0 ;
}
...全文
438
9
打赏
收藏
C++的线程不能改变引用参数的值吗
下面程序的输出结果是0,不解,不应该是1吗 void fun(int &a) { a =1 ; } int main() { int a =0 ; std::thread t(fun,a) ; t.join () ; Sleep(1000) ; cout<<a<<endl ; return 0 ; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CT8100
2017-12-27
打赏
举报
回复
把变量类型改成变量的地址或者指针。。。
大风哉
2017-12-27
打赏
举报
回复
参数传到线程里应该是在线程里有一份临时变量参数了吧,fun函数里改变的只是这份临时变量的值。如果传过去的是指针,那么改变的就是最初那个变量了。我觉得你应该看一下关于线程间传值的内容。 另外我这边你能不能帮我看个问题,我想测试下你那个程序,结果编译的时候就报错了: #include <thread> void fun(int& a) { a = 1; } int main() { std::thread t1(fun, 0);//报错的地方 } Error C2672 'std::invoke': no matching overloaded function found CppExperience c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread 240 Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'
FoolCarpe
2017-12-27
打赏
举报
回复
试试 std::thread t1(fun, std::ref(a));
xskxzr
2017-12-27
打赏
举报
回复
由于引用的是复制的临时对象,正常的编译器都应该报错。gcc和clang都会报错。
https://wandbox.org/permlink/UISR2IKcmzbB5LWM
xskxzr
2017-12-27
打赏
举报
回复
用std::ref包装a再传给f。 利用std::thread的构造函数传参时,实参会先被复制一次。
大风哉
2017-12-27
打赏
举报
回复
引用 4 楼 qq_33707711 的回复:
你在主函数里变量a没有定义啊,线程t1应该有detach()或者join()至少一个
应该是线程间传值的问题吧,主线程中值传到子线程中,实际在子线程中应该是会创建一个变量的副本,而在子线程函数里修改的是这个副本的内容。 如果这个副本是一个指针的话,通过指针修改的是指针指向的内容。
真相重于对错
2017-12-27
打赏
举报
回复
各线程,有各自的栈
Mr-Luer
2017-12-27
打赏
举报
回复
你在主函数里变量a没有定义啊,线程t1应该有detach()或者join()至少一个
Mr-Luer
2017-12-27
打赏
举报
回复
我知道用指针管用,但这里为什么引用不起作用
C++
11多
线程
编程
本课程,讲解的重点定位在
c++
11新标准中的多
线程
开发部分,同时,老师还会结合自己的经验把多
线程
的讲解进一步拓展到一个比较大的范畴,因为无论是
c++
11多
线程
开发还是各种其他的多
线程
开发实现方法,都有很多类似的...
c++
多
线程
如何传递
参数
(
值
传递,
引用
传递)
c++
多
线程
如何传递
参数
(
值
传递,
引用
传递) 转自 chen沉尘【
C++
多
线程
】 感谢作者,我只是个搬运工
线程
最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由
线程
ID、程序...
C++
多
线程
学习笔记03(
线程
参数
)
(2)传递int简单类型
参数
,建议都是
值
传递,不要
引用
。 (3)传递类对象,避免隐式类型转换,全部在创建
线程
时构建出临时对象,然后在函数
参数
里,使用
引用
,否则系统会再次构造一次对象。 (4)建议不适用detach()...
小龙:
c++
多
线程
编程三(
线程
参数
)
一、传递临时对象作为
线程
参数
thread第一个
参数
是
线程
的开始函数,后面的
参数
分别表示开始函数的
参数
。下面看代码: #include <iostream> #include <thread> using namespace std; void mythread...
c++
中多
线程
传递
参数
原理分析
关于
参数
的传递,std::thread的构造函数只会单纯的复制传入的变量,特别需要注意的是传递
引用
时,传入的是
值
的副本,也就是说子
线程
中的修改影响不了主
线程
中的
值
。
值
传递 主
线程
中的
值
,被拷贝一份传到了子...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章