草庐IT

non-volatile

全部标签

c++ - volatile 在 C++ 的单线程应用程序中有用吗?

如标题所说-volatile在单线程编程的上下文中是否有用?我知道它用于确保变量的值始终在内存中实际检查,所以在任何情况下该值可能会以应用程序/编译器不会注意到的方式更改(在ST应用程序中)?我让这个问题与语言无关,因为我不知道它们之间的任何差异会影响对这个问题的回答。但如果有的话请告诉我。编辑:正如有人向我指出的那样,这个问题与语言无关。然后我将其设为特定于C++(我读到C++版本也存在差异,但我希望它们不会大到足以使这个问题过于宽泛)。 最佳答案 这是C和C++的答案是的!当变量映射到硬件寄存器(例如I/O设备)时。硬件独立于应

c++ - 自 C++11 以来,volatile 在并发编程中的用处

我读过this和this回答。我还搜索了这本书C++ConcurrencyinAction并且没有找到关于volatile的讨论,也没有找到任何使用它的示例。看起来它根本不是为并发而设计的。那么对于并发编程,仅仅使用原子、互斥等就足够了,而忘记volatile吗?是否存在可能需要volatile来解决并发问题的情况? 最佳答案 不,在C++中,volatile关键字告诉编译器不得以任何方式优化变量。这在处理可以从您自己的代码外部更改的内存时非常有用,例如自定义板上的硬件寄存器。有关volatile的更深入指南,您应该阅读Volati

c++ - g++ "declaration of "运算符<<"as non-function"

我们有一个自定义的Logging类,它在VisualStudio2010中编译良好,但在Linux上使用g++编译时会抛出错误。我们收到的错误消息如下:Logger.hpp:84:error:declarationof"operator各自的代码行如下:/*:84*/inlineLogger&operatoroutput){if(this->loggingEnabled())std::coutoutput){if(this->loggingEnabled())std::cout>&(*StdEndl)(std::basic_ostream>&);inlineLogger&operato

c++ - 是否可以在使用 const 的所有地方使用 volatile?

我想知道volatile是否可以在const可以使用的任何地方使用,以及每种情况意味着什么。volatiledummy_classvolatiledummy_class&dummy_classvolatile*dummy_class*volatiledummy_classvolatile*volatile当涉及const时,这些都是不同的情况,相同的语义是否适用于volatile? 最佳答案 差不多。两者都是cv-qualifiers,几乎可以在任何地方使用。它们在C++语法中出现的唯一地方是:cv-qualifier:    co

c++ - C++ 中不允许使用 volatile + 对象组合?

我正在为TITMS320F28335使用嵌入式编译器,所以我不确定这是一个一般的C++问题(手头没有运行C++编译器)还是我的编译器。将以下代码片段放入我的代码中会出现编译错误:"build\main.cpp",line61:error#317:theobjecthascv-qualifiersthatarenotcompatiblewiththememberfunctionobjecttypeis:volatileFoo::Bar当我注释掉下面的initWontWork()函数时错误消失了。错误告诉我什么?我如何才能避免使用在volatilestruct上运行的static函数?st

c++ - C++ 编译器能否消除未读取的 volatile 局部变量

比如说,我有这段代码:intf(){volatileintc;c=34;returnabc();}永远不会读取volatileintc。但是它被标记为volatile,编译器能不能完全消除它呢?我在VisualC++2010中的测试显示了相互矛盾的结果。在VC++中,如果我启用优化(最大化速度),则上述函数包含一个名为c的局部变量(通过查看生成的汇编列表)。但是,我没有使用赋值运算符,而是尝试通过编译器内部函数(如memset())初始化变量(并启用使用编译器内部函数),变量被消除。intf(){volatileintc;memset((void*)&c,34,1);returnabc

Cause: org.apache.ibatis.type.TypeException: Error setting non null for xxx with JdbcType错误的详细解决方法

文章目录1.复现错误2.分析错误3.解决错误1.复现错误今天写好hive表导入的回调的接口,如下代码所示:/***hive表导入的回调接口**@authorsuper先生*@datetime2023/3/20:16:32*@return*/@ResponseBody@PostMapping(value="/xxx/importTables/callback")publicServiceStatusDatacallbackLocalHiveImportTables(@RequestParam("missionId")StringmissionId){logger.info("mock数据的入参记

C++ : friend declaration ‘declares a non-template function

我在重载时遇到问题流运算符(operator),我找不到解决方案:templateclassNVector{inlinefriendstd::ostream&operator&rhs);};templateinlinestd::ostream&NVector::operator&rhs){/*SOMETHING*/returnlhs;};它产生以下错误信息:warning:frienddeclaration‘std::ostream&operatorerror:‘std::ostream&NVector::operator如何解决这个问题?非常感谢。 最佳答

C++ 错误 : request for member '...' in 'grmanager' which is of non-class type 'GraphicsManager'

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我的类GraphicsManager出现错误。图形管理器.cpp:#include"C:\Users\ChrisUzzolina\Desktop\obj\include\GraphicsManager.h"#include#includeGraphicsManager::GraphicsManager(intSCREEN_WIDTH,intSCREEN_

具有 volatile 和外部数据访问的 C++ 常量正确性

我是一名嵌入式C开发人员,最近开始在嵌入式设备上处理C++代码,并且不确定当类访问内存映射寄存器或外部设备上的数据等volatile数据时,const正确性如何应用,例如模数转换器(ADC)。例如,我有一些类通过指针访问设备的内存映射寄存器来连接到设备的硬件模块,如下所示:classIOPin{public:/*Constructor,destructor,othermethods...*///shouldthisbeaconstmethod?boolReadIOState(){returnportregs_->state;}private:/*Otherprivatestuff...