草庐IT

non-volatile

全部标签

c++ - C++ 中的 volatile 成员函数与常量成员函数

很多人都说“volatile成员函数完全类似于const的工作方式。”如果指针被标记为const/volatile,则它们在某种意义上非常相似,它只能访问标记为const/volatile的成员函数。但实际上将成员函数定义为const有一个额外的效果,它使该函数成为只读的。函数内部对象的任何修改都会导致编译器错误。volatile成员函数中有这样的类似物吗? 最佳答案 好吧,volatile成员函数将使对象成员成为volatile,也就是说,this就像定义了volatileT*constthis一样。因此,对成员变量的任何引用也是

c++ - const ref lvalue to non-const func return value 是否专门减少拷贝?

我遇到了一个C++习惯,我试图研究它以了解它的影响并验证它的用法。但我似乎找不到确切的答案。std::vectorgetThings();voiddo(){conststd::vector&things=getThings();}这里我们有一些返回非const&值的函数。我看到的习惯是在分配函数的返回值时使用const&左值。提出这个习惯的原因是它减少了拷贝。现在我一直在研究RVO(返回值优化)、复制省略和C++11移动语义。我意识到给定的编译器可以选择阻止通过RVO进行复制,不管这里是否使用了const&。但是,在防止复制方面,const&左值的使用对非const&返回值有任何影响吗

c++ - eclipse c++ 中的 "control reaches end of non-void function"警告但没有编译或运行时错误

这是我的代码:Composer&Database::GetComposer(stringin_last_name){for(inti=0;i想法是遍历Composer对象数组并返回对其last_name字段与“in_last_name”匹配的对象的引用。我明白警告在告诉我什么,即函数可能不会返回任何内容(如果用户提供了无效的姓氏)。我的问题是,我怎样才能避免这种情况?我尝试在for循环之后添加“return0”和“returnNULL”,但它无法编译。如果此方法什么也没找到,是否应该抛出异常? 最佳答案 您的函数被声明为返回一个Co

c++ - 资格调整(const/volatile)可能导致歧义

谁能帮我理解为什么当getter是const时下面的代码无法编译(VS2010)?测试代码如下:#includeclasssocket{public://setter-throwexceptionversionvoidnon_blocking(boolmode){//...}//getter-errorcodeversionboolnon_blocking(boost::system::error_code&ec)const{//...}//setter-errorcodeversionvoidnon_blocking(boolmode,boost::system::error_cod

c++ - 如何在cpp中定义volatile元素的map

我想生成一个互斥元素的映射,它可能需要是可变的。我正在尝试定义此类内容:typedefstd::maptMutexMap;tMutexMapmyMutexMap;然后使用简单的map索引,例如:myMutexMap[10]=0;myMutexMap[23]=1;我正在使用gcc4.1.2。gcc编译器不喜欢该代码。我得到一个错误nomatchingfunctionforcallto'std::pair....'"我做错了什么? 最佳答案 C/C++的volatile不像volatile在某些托管语言中与互斥量无关(参见http://

c++ - 对一段代码进行计时时是否需要 volatile?

我想自动调整我的代码,为此必须测量某些代码部分所需的时间,例如autot0=std::chrono::high_resolution_clock::now();section_of_code_to_be_timed(arguments);autodt=std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-t0).counts();//...usingdttotweakauto-tuningparameters我担心的是编译器可能会重新安排对std::chrono::high_resolution_clo

c++ - 铿锵错误 : non-const lvalue reference cannot bind to incompatible temporary

我有一段代码可以在MSVC上正常工作,但无法用clang++编译voidMyCass::someMethod(){std::wstringkey(...);auto&refInstance=m_map.find(key);//errorhere}其中m_map定义为std::map>m_map;和clang提示non-constlvaluereferencecannotbindtoincompatibletemporary我有点了解正在创建一个临时文件,但不确定如何解决这个问题。有什么想法吗? 最佳答案 右值不能绑定(bind)到非

c++ - MS 特定的 volatile 是否会阻止硬件指令重新排序

来自documentation:MicrosoftSpecificWhenthe/volatile:mscompileroptionisused—bydefaultwhenarchitecturesotherthanARMaretargeted—thecompilergeneratesextracodetomaintainorderingamongreferencestovolatileobjectsinadditiontomaintainingorderingtoreferencestootherglobalobjects.Inparticular:Awritetoavolatile

C++1y/C++14 : Converting static constexpr array to non-type template parameter pack?

假设我有一个静态存储持续时间的constexpr数组(已知范围):constexprTinput[]=/*...*/;我有一个需要打包的输出类模板:templatestructoutput_template;我想像这样实例化output_template:usingoutput=output_template;一种方法是:templatestructmake_output_template{templatestaticconstexproutput_templatef(std::index_sequence){return{};};usingtype=decltype(f(std::m

c++ - QML:在 QML 中使用 cpp 信号总是导致 "Cannot assign to non-existent property"

我只是想将一个cpp信号连接到一个qml槽并尝试了不同的方法,但它总是在运行时导致相同的QML错误:无法分配给不存在的属性“onProcessed”!为什么?这是我的Cpp对象:#includeclassImageProcessor:publicQObject{Q_OBJECTpublic:explicitImageProcessor(QObject*parent=0);signals:voidProcessed(constQStringstr);publicslots:voidprocessImage(constQString&image);};ImageProcessor::Ima