【发布时间】:2020-05-28 21:46:50
【问题描述】:
我正在使用std::cout 进行日志记录,并且当“不要获取 'cout' 的地址,而是从 lambda 调用它”时,sonarqube 会报告错误。
std::ostream *streamp;
streamp = &std::cout;
当我使用下面的代码时,在 sonarqube 中没有观察到错误。在std::cout 函数上使用std::addressof 是否安全?
std::ostream *streamp;
streamp = std::addressof(std::cout);
【问题讨论】:
-
安全性和使用
&一样;分析仪不够聪明,无法看到发生了什么。我想知道这个警告的原因是什么...... -
这是一个非常奇怪的警告。
cout是一个静态对象,保证在您的任何代码之前被初始化,因此获取指向它的指针应该是 100% 安全的。 -
我怀疑这是一个试图捕捉
[&std::cout](){ cout << "Capturing a name unnecessarily"; }等的警告。 -
@NathanOliver 如果静态对象在关机期间进行日志记录并且
cout在记录器销毁之前被销毁,那么可能会出现问题? -
@M.M 我认为这不会发生:timsong-cpp.github.io/cppwp/…