草庐IT

c++ - 关于 volatile 使用的规则是否严格?

我看过这句话:thegeneralruleis,ifyouhavevariablesofprimitivetypethatmustbesharedamongmultiplethreads,declarethosevariablesvolatile来自thisarticle,以及这句话:Ingeneral,anydatathatmaybeundatedasynchronouslyshouldbedeclaredtobevolatile.来自thispage,现在考虑到这个引入的规则,我想知道你能否举一个例子,说明尽管存在对数据的异步访问,但声明数据volatile在实践中没有用,或者没有

c++ - 这段代码违反了严格的别名规则?

我读了https://www.qt.io/blog/2011/06/10/type-punning-and-strict-aliasing,并找到了这段代码。QDataStream&QDataStream::operator>>(qint16&i){...registeruchar*p=(uchar*)(&i);charb[2];if(dev->read(b,2)==2){*p++=b[1];*p=b[0];...作者声称MSVC优化了我觉得很奇怪的赋值。MSVC真的利用了严格的别名规则吗?uchar*不是特别允许用来做类型双关吗? 最佳答案

c++ - 严格的别名似乎不一致

有几个来自严格别名的错误,所以我想我会尝试修复所有这些错误。仔细研究了它是什么,有时GCC似乎没有发出警告,而且有些事情是不可能实现的。至少根据我的理解,下面的每一个都被打破了。那么我的理解是错误的,是否有正确的方法来做所有这些事情,或者某些代码是否只需要在技术上打破规则并被系统测试很好地覆盖?这些错误来自一些混合了char和unsignedchar缓冲区的代码,例如如下所示:size_tProcess(char*buf,char*end){char*p=buf;ProcessSome((unsignedchar**)&p,(unsignedchar*)end);//GCCdecide

c++ - 了解 visual studio 2010 中的编译器选项差异和严格的 C++ 合规性

我正在给一些作业C++代码打分,一个学生使用了一个非标准的构造函数作为一个vector的vector:vector>A(rows,cols);其中rows和cols是无符号整数。我们在类里面的教学方式是vector>A(rows,vector(cols));在填充构造函数之后(http://www.cplusplus.com/reference/vector/vector/vector/中的2个)我正在使用批处理文件通过命令行编译所有学生的代码cl/O2/EHsc/Tp这个命令在上面提到的学生行抛出了这个错误:errorC2664:'std::vector>,std::allocato

c++ - 使用 aligned_storage 时如何避免严格的别名错误

我正在使用std::aligned_storage作为变体模板的后备存储。问题是,一旦我在gcc上启用-O2,我就开始收到“取消引用类型双关指针将破坏严格别名”的警告。真正的模板要复杂得多(在运行时检查类型),但生成警告的最小示例是:structfoo{std::aligned_storagedata;//...set()usesplacementnew,storestypeinformationetc...templateT&get(){returnreinterpret_cast(data);//warning:breaksstrictaliasingrules}};我很确定boo

objective-c - Objective-C 中的严格类型检查第 2 部分

在thisquestion我一直在寻找一种使用定义来确保变量属于特定类型的方法。但有时我会遇到这种情况:-(void)theSituation:(Thinger*)thinger{ASSERT_IS_KIND_OF(thinger,Thinger);//etc.etc.然后我开始想,仅用于调试目的,能够调用类似的东西可能会很好:-(void)theSituation:(Thinger*)thinger{ASSERT_INPUT_PARAMS_ARE_OF_CORRECT_TYPES();//etc.etc.问题是:您能否通过#define检查方法的参数类型是否正确(使用isKindOf

php - php 中有什么方法可以使 SWITCH 运算符严格比较大小写吗?

我有这样的控制结构:switch($var){caseTRUE:break;caseFALSE:break;caseNULL:break;}还有我的NULLcase永远不会被调用,因为正如我在php手册中发现的那样:Notethatswitch/casedoesloosecomparision.我知道我可以使用IF而不是SWITCH但我不想,我已经有一些了IF's在每个CASE我的SWITCH.有没有办法重写SWITCH还是使用一些技巧使其比较值严格? 最佳答案 是的,你可以做到switch(true){case$var===TRU

php - 严格标准错误

parse_users函数返回一个数组。我正在另一个函数中执行以下操作:returnreset($this->parse_users($records));但是我得到了一个严格的标准:只有变量应该通过引用传递...是不是因为我对函数做了reset()?我必须这样做吗:$users=$this->parse_users($records);returnreset($users);还是别的什么? 最佳答案 就是这样。reset将对数组的引用作为参数,因此它基本上需要一个真正的变量来引用——即使它是一个按引用传递的值。

包含 php 严格错误

如果类像这样在一个文件中,似乎不会发生严格错误:abstractclassFood{}classMeatextendsFood{}abstractclassAnimal{functionfeed(Food$food){}}classCatextendsAnimal{functionfeed(Meat$meat){parent::feed($meat);}}但是如果您将类定义放在单独的文件中并像这样包含它们:abstractclassFood{}classMeatextendsFood{}require'Animal.php';require'Cat.php';抛出严格标准错误信息:St

PHP 函数 mb_detect_encoding 严格模式

在函数中mb_detect_encoding严格模式有一个参数。在第一个最赞的评论中:这是真的,是的。但是谁能给我一个解释,这是为什么? 最佳答案 此答案中的所有内容均基于我对代码here的阅读和here.我没有写它,我没有用调试器单步调试它,这只是我的解释。似乎意图是针对严格模式检查字符串作为一个整体是否对编码有效,而非严格模式将允许可能的子序列是有效字符串的一部分。例如,如果字符串以多字节字符的第一个字节结尾,它在严格模式下将不匹配,但在非严格模式下仍符合UTF-8标准模式。但是似乎存在一个错误*,即在非严格模式下,在某些情况下