我正试图演示给一个同事,为什么您最好使用以下代码将const引用传递给执行只读操作的函数。令我惊讶的是,即使我在另一个线程处于睡眠状态时更改passedBool
的值,它也会显示“这很安全!”。
我正在尝试确定是否在某处打了错,是否编译器优化了代码并通过复制传递了passedBool
以避免某些开销,或者是否启动了另一个线程创建了{{1}的本地副本}。
passedBool
答案 0 :(得分:3)
线程函数的参数按值移动或复制。如果 一个引用参数需要传递给线程函数,它具有 要包装(例如,使用std :: ref或std :: cref)。