草庐IT

c++ - 返回类型取决于算术运算的顺序。这是正确的吗?

考虑以下代码片段:templatestructUn{Un(intp):n{p}{}Uoperator+(Uv)const{returnU{n+v.n};}intn{};};structR:Un{usingUn::Un;};structD:Un{usingUn::Un;D(Rv):Un{v.n}{}operatorR()const{returnn;}};用法如下:templatevoidwhat_type(Tt){std::cout::value::value输出是:typeR=1typeD=0typeR=0typeD=1这意味着如果在算术表达式中R类型出现在第一个,则整个表达式的类型为

c++ - 这是未定义的行为还是 struct init 的错误?

请考虑这段代码:#includeintmain(){structA{intx;inty;intz;intfoo(){std::coutxyzxyzx=1;this->z=10;return2;}};Ab{b.foo(),b.z=b.moo(),3};std::cout我的VS2017(x64版本)中的结果:enterfoo:0,0,0entermoo:5,0,0final:1,2,3ideone.com(gcc6.3)的结果https://ideone.com/OGqvjW):enterfoo:0,0,3entermoo:5,0,3final:1,2,2一个编译器立即将z成员设置为3,

c++ - 奇怪的代码破坏了 MSVC 中的构建。这是什么意思?

我正在尝试将rapidxml包含到我当前的项目中。但是,它不会构建。VisualStudio会提示这段代码(rapidxml.hpp:419+451):419:void*memory=allocate_aligned(sizeof(xml_attribute));420:xml_attribute*attribute=new(memory)xml_attribute;编译器会说rapidxml.hpp(420):errorC2061:syntaxerror:identifier'memory'我有点明白这会如何混淆编译器。它实际上也让我很困惑。什么是(memory)的一部分new(me

c++ - 在 c++ 中的 fn 调用中,args 被复制到相应的参数。这是初始化还是赋值?

在C++中的函数调用中,参数被复制到相应的参数中。这是初始化还是赋值? 最佳答案 参数传递语义是初始化的语义。意思是,您的类的复制/移动构造函数将被调用。 关于c++-在c++中的fn调用中,args被复制到相应的参数。这是初始化还是赋值?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/14737680/

c++ - 从 priority_queue 弹出时出现排序问题,这是 std::priority_queue 的错误吗

#include#include#include#includestructTemp{intp;std::stringstr;};structTempCompare{booloperator()(Tempconst&a,Tempconst&b){returna.p>b.p;}};intmain(){std::priority_queue,TempCompare>pq;//EnableandDisablethefollowinglinetoseethedifferentoutput//{Tempt;t.p=8;t.str="str1";pq.push(t);}{Tempt;t.p=8;t

c++ - 在嵌套的 for 循环中循环计数器设置为自身,这是什么意思?

对于我正在从事的项目,我需要检查C++程序的源代码。在几个地方,我看到了一些我不理解的东西,而且我在Internet上找不到任何相关信息。在几个嵌套的for循环中,外层循环的计数器变量被设置为自身。那是退出循环,跳过一个循环,有人知道吗?所以是“n=n;”部分:)for(intn=0;n 最佳答案 n=n;这行代码没有做任何事情,整个if(p==2300){n=n;部分可能会在发布版本中被优化掉。我怀疑原作者这样做的原因是他们可以在n=n;行下断点,并在p为2300时在调试器中捕获它。他们可能提交了更改错误。现代IDE通常有一种方法

c++ - 不遵循构造函数中的局部变量。这是 gdb 中的错误吗?

我目前在UbuntuLinux上运行gdb版本6.7.1,并在C++项目中工作。令人惊讶的是,我在尝试调试构造函数时发现在构造函数范围内声明的局部变量没有被gdb遵循或注意到。这是错误吗?感谢任何信息.. 最佳答案 这是一个bug在GCC中,而不是在GDB中。最近fixed. 关于c++-不遵循构造函数中的局部变量。这是gdb中的错误吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

C++ 模板成员特化——这是编译器限制吗?

有没有可能做这种特化?如果是,怎么办?有问题的专业被标记为//THISSPECIALIZATIONWILLNOTCOMPILE我用过VS2008,VS2010,gcc4.4.3都编译不了。我知道我可以通过重载func来避免这种情况,但我想知道是否有一种方法可以通过模板特化来做到这一点。(尽管可能不切实际/不可取)#include#includeusingnamespacestd;templateclassklass{public:templatevoidfunc(BETAB);};templatetemplatevoidklass::func(BETAB){couttemplatevo

c++ - 这是什么语法 : "ACGT"[(int)qrand() % 4]

我正在查看Qt特定的C++solution对于典型的生产者/消费者问题。这是生产者的代码:classProducer:publicQThread{public:voidrun(){qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));for(inti=0;i我无法理解for循环中的第二行,即。"ACGT"[*]语法。它具体做什么?这是Qt特定的还是我不知道的C++语法?PS:完整源代码here 最佳答案 它生成一个随机字符:A、C、G、T。Literal"ACGT"是charconst[

c++ - 这是确保隐式类型转换不会发生的合法方法吗

这是确保不会发生隐式类型转换的合法方法吗?#include#includevoidfunc(std::strings){std::coutvoidfunc(T)=delete;intmain(){func("test1");//str.cc:Infunction‘intmain()’://str.cc:13:16:error:useofdeletedfunction‘voidfunc(T)[withT=constchar*]’//func("test1");//^//str.cc:9:6:error:declaredhere//voidfunc(T)=delete;//^//func(