草庐IT

行为不当

全部标签

c++ - 关于成员函数指针值的 Constexpr - 未定义的行为?

我对C++中类似机制的简单反射有疑问。我想要一种模板类型,它应该以不同的成员函数指针作为模板参数表现不同:[解决方案#1,按标准来说是不好的]如果我有一个带有类类型及其成员函数指针的类模板,我不能部分特化为null的成员指针,因为我不能特化“具有依赖类型的非类型模板参数”(参见:https://en.cppreference.com/w/cpp/language/partial_specialization参数列表[5])templatestructp{};templatestructp{};[解决方案#2,GCC问题]如果我尝试专注于一个推导的constexpr值,它反射(refle

c++ - 控制 OpenMP 程序中的 FPU 行为?

我有一个修改FPU控制字的大型C++程序(使用_controlfp())。它揭露一些FPU异常并安装SEHTranslator以生成类型化的C++异常。我正在使用VC++9.0。我想使用OpenMP(v.2.0)来并行化我们的一些计算循环。我已经成功地将它应用于一个,但数值结果略有不同(虽然我知道这也可能是由于计算以不同的顺序执行)。我假设这是因为FPU状态是特定于线程的。有没有办法让OpenMP线程从主线程继承该状态?或者是否有某种方法可以使用OpenMP指定新线程执行设置正确状态的特定函数?处理这种情况的惯用方法是什么? 最佳答案

基于属性名称的JavaScript“此”关键字不同的行为

尽管学习JavaScript,我遇到了一个示例,该示例在行为上取决于属性名称。在情况1中,它打印未定义(这是可以理解的)在情况2中,它无需打印(ff54)或一些不寻常的代码(在运行此脚本时查看)问题当属性名称更改时,为什么会有不同的行为?tests"usestrict";Case1letmyAbstractObject2={text1:"someText",someMethod1(){document.write(`[Output]text1=${this.text1}!`);}};myAbstractObject2.someMethod1();(true?myAbstractObject2.

c++ - 打印/阅读时间时的奇怪行为

我正在尝试将std::time_point保存到std::stream中并读回。一个问题是使用标准功能会在某处“损失”一个小时。也就是说,我阅读的时间比我写作的时间晚了1小时。我怀疑我需要在某处设置夏令时。我编写了一个小程序,将时间打印到std::stringstream并读回。#include#include#include#include#includeusingstd::chrono::system_clock;namespacechrono=std::chrono;voidtest();intmain(intargc,char**argv){std::stringstreams

Swift自定义饼图 - 从多个Uibezierpaths削减透明圆圈的奇怪行为

使用Swift创建自定义的饼图/甜甜圈样式图,并在尝试将孔从甜甜圈中切出来时遇到一个奇怪的问题。我尝试了第二个UibezierPath的中心和半径上的变化,但是我无法从中心完成一个干净的切口孔。任何帮助将不胜感激。Uiview的子类:importUIKitpublicclassDoughnutView:UIView{publicvardata:[Float]?{didSet{setNeedsDisplay()}}publicvarcolors:[UIColor]?{didSet{setNeedsDisplay()}}@IBInspectablepublicvarspacerWidth:CGFl

c++ - clang 和 gcc 在处理模板生成和静态 constexpr 成员时的不同行为?

考虑以下程序(抱歉太长了;这是我能想到的表达问题的最短方式):#include#include#includeusingnamespacestd;std::vector&test_vector(){staticstd::vectorrv;returnrv;}templateclassRegistrarWrapper;templateclassRegistrar{Registrar(){auto&test_vect=test_vector();test_vect.push_back(std::type_index(typeid(T)));}friendclassRegistrarWrap

c++ - 在对项目调用 next()/previous() 时,迭代器预计会有不同的行为

我在上面创建了一个简单的map和一个迭代器。当我将迭代器移动到下一个项目时,它表现良好。转发迭代器后,如果我要求它返回上一个项目并获取迭代器的value(),它实际上不是前一个项目值,实际上该值根本没有改变。似乎有什么不对劲或者我用错了方法!问题出在哪里?看下面的代码#include"mainwindow.h"#include#include#includeintmain(intargc,char*argv[]){QApplicationa(argc,argv);QMapmap;map.insert(4234,3);map.insert(4200,2);map.insert(4100,

c++ - 构造虚拟基类时的编译器行为

考虑这段代码:#includeclassA{public:A(ints){std::coutA类是B1和B2的虚基类。类C1和C2是相同的,除了C1使用{...}而C2使用(...)来构造B1和B2。由于这里使用了虚继承,类A应该作为C1或C2构造的一部分构造。如果我使用MicrosoftVS2015编译此代码,它会在运行时产生此输出:Createc1:A(5)B1(1,2)B2(3,4)Createc2:A(5)B1(1,2)B2(3,4)这正是我所期望的。但是如果我用GCC(6.1.0)编译它,它会产生这个输出:Createc1:A(5)A(1)B1(1,2)A(3)B2(3,4)

c++ - 将指针转换为指针引用会导致未定义的行为吗?

我遇到了以下丑陋的代码,想知道标准对此有何规定。调用foo()是否被认为会导致未定义的行为?或者它是无害的?#includeclassBase{};classDerived:publicBase{};voidfoo(Base*&b){std::cout我相信丑陋的c-cast已经完成,因为简单的(Base*)cast会导致编译错误。即便如此,它现在编译是否只是因为严格的别名?还是标准允许转换为引用? 最佳答案 这是相当UB,因为您有效地重新解释派生指针作为基指针。原因是您没有将Derived指针转换为Base指针,而是将T&转换为U

c++ - CMake 生成的 DLL 和 Curiously Recurring 模板 (C++) 的不正确行为

我在Windows上遇到了CMake生成的DLL文件的令人困惑的问题。在我的库中,我使用CuriouslyRecurringTemplatePattern为某些类提供唯一的ID号://da/Attribute.h:#ifndefDA_ATTRIBUTE_H#defineDA_ATTRIBUTE_Hnamespaceda{typedefunsignedintAttributeId;classAttributeBase{public:virtualAttributeIdgetTypeId()const=0;protected:/**StaticIDcounter.Everyclasstha