草庐IT

c++ - 对默认参数使用右值引用

我想创建一个函数,它接受一个对象的可选引用,如果没有提供,则在函数运行期间创建一个对象,即voidFoo(Bar&b=Bar()){/*stuff*/}当然,这是无效代码,因为在此上下文中不能将Bar隐式转换为Bar引用。引用不能是const,因为b在函数内部发生了变化。您可以通过使用右值引用来解决这个问题,即voidFoo(Bar&&b=Bar()){/*stuff*/}这是对右值引用的有效使用吗?调用者现在必须在他们的Bar参数上调用std::move,即使我无意像往常一样清除传递的Bar传递右值时的情况。 最佳答案 voidF

c++ - 为什么对箭头 (->) 运算符的调用会失败?

考虑以下代码:#includeclassTest{public:Test():a{0}{}voidprint()const{std::cout(){a=5;}voidoperator++(){++a;}public:inta;};intmain(){Testa;a.print();//Incrementoperatora.operator++();//CORRECT++a;//CORRECTa.print();//Indirectionoperatora.operator->();//CORRECTa->;//INCORRECTa.print();}为什么对第二个->运算符的调用不正确

c++ - Visual Studio 不允许我使用 sqrt 或 floor,对重载函数的调用不明确

我调用longlonga=sqrt(n/2);a和n都是longlong但它不会让我编译因为它说我使用sqrt()是一个模棱两可的调用。我根本看不出它在这里可能是模棱两可的。我该如何解决这个问题?我对floor()也有同样的问题。我的包括#include"stdafx.h"#include#includeusingnamespacestd; 最佳答案 sqrt()有几个重载和floor(),对sqrt(longlong)的调用没有“最佳匹配”根据重载决议规则。只需将参数转换为适当的类型——即,longlonga=sqrt(stati

c++ - 为什么在 C 和 C++ 的设计中没有对 CPU 状态寄存器的内在访问?

在溢出标志的情况下,访问此标志似乎对跨体系结构编程大有裨益。它将提供一种安全的替代方法来依赖未定义的行为来检查有符号整数溢出,例如:if(a我知道有一些安全的替代方案,例如:if(a>(INT_MAX-100))//detectedoverflow但是,C和C++语言似乎都缺少对状态寄存器或其中的各个标志的访问。为什么没有包含此功能,或者做出了哪些语言设计决定禁止包含此功能? 最佳答案 因为C和C++被设计为与平台无关。状态寄存器不是。如今,二进制补码普遍用于实现有符号整数运算,但情况并非总是如此。一个人的补码或符号和绝对值曾经很常

c++ - 对 'QNetworkAccessManager' 的 undefined reference

我是QTAPI和QTIDE的新手,我正在学习本教程:http://developer.nokia.com/community/wiki/Creating_an_HTTP_network_request_in_Qt,但是当我尝试编译时出现此错误,问题的通常原因是:编译器无法找到方法代码所在的.cpp/.lib存档,但在这种情况下,api已经配置好了,我不明白为什么会出现此错误,而且我找不到项目属性,这是我的测试代码:#include#include#include#include#include这是mainwindow.hpp文件中包含的header,现在是mainwindow.cpp:

c++ - 使用 sort() 对 unordered_map 进行排序

这个问题在这里已经有了答案:Sortingstd::unordered_mapbykey(5个答案)关闭5年前。我正在尝试使用sort()函数对unordered_map进行排序,但我一直收到编译器错误。谁能帮忙?boolcomp(paira,pairb){returna.secondtable;for(inti=0;i::iteratorit=table.find(str[i]);if(it==table.end()){table.insert(make_pair(str[i],1));}else{it->second=it->second+1;}}for(unordered_map

c++ - 在 std::vector::clear 之后对 vector 中的构造/破坏感到困惑

#include#includeclassA{public:A(){std::coutmyvec;myvec.push_back(A());myvec.push_back(A());myvec.clear();return0;}输出:constructordestructorconstructordestructordestructordestructordestructor这里有五次对析构函数的调用。前两个是由于传递给push_back的临时文件。还有另外三个电话,但我预计还有一两个电话。myvec.clear()只会清除两个内容,因此A的析构函数应该只调用两次(而不是三次)。为什么

c++ - 标准对 std::pow、std::log 等 cmath 函数有何看法?

标准是否保证函数在所有实现中返回完全相同的结果?以32位IEEEfloat的pow(float,float)为例。如果传入相同的两个float,所有实现的结果是否相同?或者标准是否允许根据用于实现pow的算法的微小差异提供一些灵active? 最佳答案 不,C++标准不要求cmath函数的结果在所有实现中都相同。对于初学者,您可能无法获得IEEE-754/IEC60559浮点运算。也就是说,如果一个实现确实使用了IEC60559并定义了__STDC_IEC_559__,那么它必须遵守C标准的附件F(是的,您的问题是关于C++,但C+

c++ - 如何对 unique_ptr 的 vector 进行排序?

我声明了一个vector如下:vector>Workers.Worker是具有私有(private)字段的基类name它有两个派生类:Builder和Driver.我添加到WorkersBuilder的vector对象和Driver然后我想按name对vector进行排序使用#include像这样:sort(Workers.begin(),Workers.end(),cmp_by_name);boolcmp_by_name(constWorker&a,constWorker&b){returna.getName()但是VS编译器说:Error1errorC2664:'bool(cons

c++ - 哪个跨平台 GUI 库对每个平台都具有最原生的感觉?

我注意到GTK在所有平台上都有统一的感觉,这对Linux爱好者来说非常好,但对于喜欢原生GUI感觉的人来说就不那么好了。我还没有正确使用Qt,这就是为什么我不能说这是为每个平台提供最原生感觉的最佳选择-所以有人可以确认Qt是否是我所追求的? 最佳答案 我认为Qt是拥有原生外观的绝佳选择。在WindowsXP上,小部件将使用Luna样式(WindowsXP默认样式)呈现。在Vista/7上,它们将使用Aero主题呈现。在MacOS上,它们将使用Aqua主题呈现。在Linux上,情况有所不同。Qt将使用他自己的主题(Plastique风