草庐IT

行为树

全部标签

c++ - 显式转换、直接初始化和复制初始化之间的不同行为

我有一个C类,它有一个转换运算符到任何东西。在示例中,我尝试以三种不同的方式将其实例转换为std::string:static_cast,std::string的构造函数并分配给std::string。然而,只有最后一个编译通过,而其他的则引发歧义构造函数的错误。错误的原因很清楚:有很多方法可以将C转换为std::string的构造函数可以接受的东西。但是这些情况有什么区别呢?为什么cast运算符在这里按预期工作,但在那里却没有?structC{templateoperatorT()const{returnT{};}};intmain(){Cc;cout(c)UPD:正如bolov在评

c++ - 引用未初始化的内存。未定义的行为?

请允许我先声明,出于显而易见的原因,我不推荐以下任何做法。但是,我今天就此进行了讨论,有些人坚持认为使用这样的引用是未定义的行为。这是一个测试用例:#includestructmy_object{inta=1;intb=2;std::stringhi="hello";};//Usingunionpurelytoreserveuninitializedmemoryforaclass.unionmy_object_storage{chardummy;my_objectmemory;//C++willyellatyoufordoingthiswithoutsomeconstructors.m

c++ - 为什么使用统一初始化语法会导致与 "old"样式 () 不同的行为?

如果我尝试为std::set使用统一的初始值设定项,我会得到不同的结果。例子:intmain(){std::arraya{1,2,3,4};std::sets1{a.begin(),a.end()};std::sets2{a.begin(),a.end()};std::sets3(a.begin(),a.end());for(auto&i:s1){std::cout结果:1234####0x7ffecf9d12e00x7ffecf9d12f0####1234这似乎与“演绎指南”有关,如果与{}或()语法一起使用,它们的评估方式会有所不同。 最佳答案

c++ - 使用 const_cast<> 时未定义的行为在哪里?

如果我这样做:constchar*const_str="Somestring";char*str=const_cast(const_str);//(1)str[0]="P";//(2)未定义的行为到底在哪里(哪一行)?我一直在SO上搜索很多,但没有找到任何明确和准确的答案(或者至少,我无法理解)。另外相关:如果我使用提供这种功能的外部库://Thedocumentationstatesthatstrwillneverbemodified,justread.voidread_string(char*str);是否可以这样写:std::stringstr="Mystring";read_s

c# - C# 和 C++ 中虚拟函数的编译器行为差异。这是我在采访中被问到的

C++和C#中的Virtual有何不同?基本上我想知道Vtable在C#和C++中的表示方式有什么不同吗?编译器在C#和C++中创建V表的方式也有什么不同吗?基本上,面试官想知道在C#和C++的情况下,虚函数的编译器行为有何不同。我已经回答了提到VTABLE中可能没有区别的问题,因为C#中没有虚拟析构函数。 最佳答案 谁说过v表?你为什么假设它们存在?主要区别(与语法相关)是在C++中,派生类不必知道该函数在祖先类中声明为virtual,而在C#中,您必须使用override关键字。 关

c++ - 系统之间奇怪的 'Sleep' 行为

我有一个程序使用SleepWin32API调用让线程等待特定的时间。简而言之,它通过发送预取在内存中的图像来模拟相机。我正在使用Sleep来模拟帧率--Sleep(1000/fps)这在我的开发系统(Inteli5(第一代)、Win764)上运行良好,但当我在另一个系统(Inteli7-2600-SandyBridge)上运行时,sleep时间完全不同且不准确。例如,Sleep(16)休眠大约32msSleep(3)休眠16ms过去,我认为Windows中的最短sleep时间为15ms,但我的开发系统没有这个限制。有什么想法吗?另外,有没有更好的方法来实现我的模拟器的帧率?

c++ - std::unique_ptr 和 std::shared_ptr 之间破坏行为差异的基本原理是什么?

来自http://en.cppreference.com/w/cpp/memory/unique_ptr:IfTisderivedclass(sic)ofsomebaseB,thenstd::unique_ptrisimplicitlyconvertibletostd::unique_ptr.Thedefaultdeleteroftheresultingstd::unique_ptrwilluseoperatordeleteforB,leadingtoundefinedbehaviorunlessthedestructorofBisvirtual.Notethatstd::shared

c++ - 奇怪的 "unsigned long long int"行为

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Howdoyouprintfanunsignedlonglongint?#includeintmain(){unsignedlonglongintn;scanf("%llu",&n);printf("n:%llu\n",n);n/=3;printf("n/3:%llu\n",n);return0;}无论我输入什么,我都会得到非常奇怪的输出,例如:n:1n/3:2863311531或n:2n/3:2863311531或n:1000n/3:2863311864这是什么原因?我应该如何正确执行此操作?(g++3.4

c++ - 函数式 C++11 奇怪的行为

为什么这一行不编译:functionmin_ptr=min;但这工作正常:constint&(*min_ptr)(constint&,constint&)=min;函数类似乎是函数指针的灵活且舒适的替代品。但为什么这种情况不起作用?编辑。我的代码:#include#include#includeusingnamespacestd;intmain(){constint&(*min_ptr)(constint&,constint&)=min;//Itisworksfinefunctionmin_f=min;//Doesn'tcompile/*Errormessage:error:conve

c++ - unsigned(-0.0) 的行为是否在 C++ 中定义?

C++114.9float转换[conv.fpint]:Aprvalueofafloatingpointtypecanbeconvertedtoaprvalueofanintegertype.Theconversiontruncates;thatis,thefractionalpartisdiscarded.Thebehaviorisundefinedifthetruncatedvaluecannotberepresentedinthedestinationtype.如果值为-0.0,是否定义了行为?归结为“截断值是否不能在目标类型中表示”。可以表示为零。可以负零吗?在这种情况下,这两