草庐IT

c++ - 我可以覆盖 std::hash 吗?

我可以用我自己在C++11中定义的std::hash替换std::hash的实际实现吗?我的意思是从我的代码库开始,不涉及标准库。在这种情况下我看不到虚函数/多态性有任何用处,所以我想我无论如何都不能改变std::hash的定义? 最佳答案 您可以为特定类型专门化哈希。参见here和here例如像这样namespacestd{templatestructhash{size_toperator()(constFoo&x)const{/*yourcodehere,e.g."returnhash()(x.value);"*/}};}如果你

C++ 多重继承 - 相同的方法名称 - 我可以以某种方式删除其中一个吗?

我在C++11中有这个结构structA{intidA;voidsetId(inti){idA=i;}intgetId(){returnidA;}virtualvoidfoo()=0;};structB{intidB;voidsetId(inti){idB=i;}intgetId(){returnidB;}virtualvoidfoo2()=0;};structAB:publicA,publicB{voidfoo()override{}voidfoo2()override{}};现在在main中我可以这样调用它:AB*ab=newAB();ab->B::setId(10);但我真的不喜

c++ - 我可以传递给函数的最大字符串长度(或大小)是多少?

我有以下功能:intFoo(stringsentence);我想知道我可以传递的最大字符串长度是多少?我认为这应该取决于分配给函数的堆栈大小,因为这个字符串将被复制到堆栈,是这样吗?或者它取决于string::max_size值?我在VS2010、windows7下使用C++编辑。我需要一份拷贝,因为该函数会修改字符串内容。 最佳答案 std::string对象将被复制到堆栈上,但字符串主体不会——它将分配到堆上。实际限制将取决于系统和程序内存使用情况,在32位系统上可能是一千万到十亿个字符。

c++ - 我可以在 vector 的一个实例上使用 value_type,而不是它的类型吗

在播放和尝试计算vector的总大小时,我尝试了类似的方法vectorvd;autoarea=vd.size()*sizeof(vd::value_type);//IveseenStepanovuseareaasnameforthiskindofsize,idkifheaddsthesizeofvdalsotoarea:)不幸的是,这不起作用......我需要使用vector::value_type但这会降低代码的可读性。它可以工作吗?我不喜欢sizeofvd.front()因为写front()看起来很难看为此。编辑:decltype变体也适合我所说的丑陋类别......

c++ - 我可以用 std::chrono::high_resolution_clock 替换 SDL_GetTicks 吗?

检查来自C++的新内容,我找到了std::chrono库。我想知道std::chrono::high_resolution_clock是否可以很好地替代SDL_GetTicks? 最佳答案 使用std::chrono::high_resolution_clock的好处是避免在Uint32中存储时间点和持续时间。std::chrono库附带了各种各样的std::chrono::duration,您应该改用它们。这将使代码更具可读性,并减少歧义:Uint32t0=SDL_GetTicks();//...Uint32t1=SDL_GetT

c++ - 我可以在基类中重载纯虚方法吗?

在下面的示例中,我有一个带有纯虚方法(又名FUN1)和一个普通方法(又名FUN2)的抽象类。#includeclassA{public:virtualvoidfun(inti)=0;//FUN1voidfun(){this->fun(123);}//FUN2};classB:publicA{public:virtualvoidfun(inti){std::cerr为什么我不能在派生类上调用FUN2?g++报错:main.cpp:19:8:error:nomatchingfunctionforcallto‘B::fun()’编辑:注意Overloadofpurevirtualfuncti

c++ - 我可以在编译时强制该函数永远不会被调用吗?

我想阻止从std::string到std::filesystem::path或boost::filesystem::path的隐式转换>.据我所知,没有办法修改系统header以使构造函数显式化。所以我想我会创建一个我的内部api函数的覆盖,接受std::string而不是fileystem::path并调用assert(false)里面。但后来我开始怀疑编译器是否应该知道给定的函数声明是否曾被引用,因此假设它可以在编译时而不是运行时检测到对此类覆盖的调用,并警告或编译失败。我的想法对吗?有什么方法可以防止在编译时调用此类函数吗?最好的,彼得 最佳答案

c++ - 在 C++ 模板函数中,我可以返回取消引用的参数类型吗?

我的意思是下面的。我想要一个模板函数,它采用两个vector迭代器(或两个指向double组的指针)并返回一个与我传递的vector迭代器或数组指针有某种关联的double。但是,我希望它适用于double或int,或任何算术类型。我想我不能说:templateT*func(TBegin,TEnd)Tnew_variable=Begin+5;return(*new_variable);}因为编译器不会理解T*的含义。我想到的一个解决方案是将我要返回的内容作为第三个参数:templatevoidfunc(TBegin,TEnd,T*new_variable)new_variable=Be

c++ - 我可以在扩展 Python 的同时使用 C++ 功能吗?

Python手册说您可以在C和C++中为Python创建模块。使用C++时可以利用类和模板之类的东西吗?它不会与其他库和解释器产生不兼容吗? 最佳答案 Hook函数的实现是用C还是用C++实现并不重要。事实上,我已经看到一些积极使用C++模板甚至Boost库的Python扩展。没问题。:-) 关于c++-我可以在扩展Python的同时使用C++功能吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - 我可以在 C++ 中创建一个匿名的、大括号初始化的聚合吗?

可以创建一个通过构造函数参数初始化的匿名对象,例如在下面的return语句中。structS{S(inti_,intj_):i(i_),j(j_){}inti,j;};Sf(){returnS(52,100);}intmain(){cout但是,是否可以类似地创建一个用大括号初始化器初始化的匿名聚合?例如,是否可以将下面的f()主体压缩为一个没有“s”的return语句?structS{inti,j;};Sf(){Ss={52,100};returns;}intmain(){cout 最佳答案 您不能在当前版本的C++中使用。你将能