草庐IT

c++ - 使用 Assembly 和 C++ 调用一个函数两次

我有一个代码可以将要调用的函数更改为我的新函数,但我不想只调用我的新函数,我还想调用旧函数。这是一个示例,因此您可以理解我在说什么:如果我反汇编我的.exe,我会看这部分:L00123456:moveax,[L00654321]//doesn'tmattermovecx,[eax+1Ch]//doesn'tmatterpushesi//theonlyparameter0x123callSUB_L00999999//thisisthefunctionIwannaoverwrite//...(0x123是那一行的地址)所以,我使用了这段代码:DWORDold;DWORDfrom=0x123

c++ - 有没有办法使用静态断言和类型特征来防止类被派生两次?

我意识到这是一个人为的例子,但我想要一个编译检查来防止这种情况......classA{};classB:publicA{};classC:publicA{};classD:publicB,publicC{BOOST_STATIC_ASSERT((is_base_of_once::value))}; 最佳答案 以下应该有效:BOOST_STATIC_ASSERT(((A*)(D*)0==0))如果A存在两次,这应该会产生歧义错误,否则测试将始终成功(因为它比较两个空指针)。 关于c++-

c++ - 比较两组 std::weak_ptr

我正在尝试使用GCC4.7.2比较两组C++11weak_ptr。下面的代码显示了重现错误的最小可能样本:std::set,std::owner_less>>set1;std::set,std::owner_less>>set2;boolresult=(set1==set2);尝试编译以上内容会导致一长串错误,其中第一个实际错误如下:/usr/include/c++/4.7/bits/stl_algobase.h:791:6:error:nomatchfor‘operator==’in‘__first1.std::_Rb_tree_const_iterator::operator*>(

c++ - C++ 静态初始化在同一个回溯中出现两次是否正常?

我正在尝试调试使用GCC编译的C++程序,该程序在启动时卡住。GCCmutex保护函数的静态局部变量,似乎等待获取这样的锁是它卡住的原因。这是如何发生的相当令人困惑。第一个模块A的静态初始化发生(GCC调用的__static_init函数在回溯中可见),它调用具有静态局部变量的函数Foo()。静态局部变量是构造函数调用了好几层函数的对象,然后回溯突然有几个??的,然后它在第二个模块B的静态初始化中(__static函数再次出现),然后调用Foo(),但由于Foo()从未在第一次返回时本地静态变量上的互斥量仍然设置,因此它锁定。一个静态初始化如何触发另一个?我的第一个理论是共享库——模块

c++ - 为什么两次使用 ifstream 对象会导致错误?

我想输出一个词在文本中出现的次数,并输出包含该词的行,但是当我输出vector[*beg]时,我发现vector是空的!我认为问题在于使用ifstream&ifs两次:autowordMap=setMap(ifs);std::vectorvvector=read_to_vector(ifs);如果我交换这两个语句,它会立即崩溃我想知道问题出在哪里,如何解决。#include#include#include#include#include#include#include#includestd::vectorread_to_vector(std::ifstream&ifs){std::st

c++ - 与同一个库链接两次是 g++ 的问题吗?

我注意到,当我使用gcc创建我的应用程序并在链接阶段查看输出时,我看到以下库包含两次:/home/rb01/opt/trx-HEAD/gcc/4.2.4/lib/../lib64/libstdc++.so所以我只是想知道这是g++(gcc)的问题还是第二个被忽略了?谢谢! 最佳答案 如果库中的符号已经解析,链接器将忽略它们。对于共享库,就像在这种情况下一样,链接器实际上并不链接。对于静态(.a)库,命令行上的多个拷贝实际上很有用,即使不是很漂亮,例如,如果main访问libb,libb访问libc,libc访问libb中的某些内容,

c++ - AESlibrary 只有两行

有没有人知道一个使用高级加密标准加密的c++库,只需两行代码就可以实现加密和解密(使用计数器模式)。无需填充或缓冲明文库将处理所有这些。我看过crypto++、openssl和libtomcrypt,但在这些中,我似乎需要编写代码来缓冲和填充我不想要的明文。简而言之,我需要这些方面的东西:ciphertext=encrypt(ctr_mode(),plaintext,key)plaintext=decrypt(ctr_mode(),ciphertext,key)谢谢! 最佳答案 我不知道你要求密文是简单的AES计数器模式有多严格,但

c++ - 两阶段查找 : is it possible to easily mix inheritence and templates

简介:C++标准区分依赖模板参数的符号名称和不依赖模板参数的名称,这称为两阶段名称查找(参见here)。定义模板时,会尽快解析非相关名称。另一方面,从属名称仅在模板实例化时解析。示例:templatestructBase{typedefTtype;staticconstintn=3;virtualintf()=0;intf(intx){returnx*2;}};//doesn'tcompile!templatestructDerived:Base{typefield;//Thecompilerdoesn'tknowBase::typeyet!intf(){returnn;}//thec

c++ - CppUnit 和 CMake : . cpp 文件被编译两次

我目前正在使用CMake构建我的项目,并使用CppUnit对其进行测试。在我的CMake文件中,我创建了两个可执行文件。sample是编译后的源代码本身。使用sample_test我运行测试。如果我是这是我的CMakeLists.txt的一部分SET(SAMPLE_ROOT_PATH${PROJECT_BINARY_DIR})SET(SAMPLE_SOURCE_PATH${SAMPLE_ROOT_PATH}/src)SET(SAMPLE_TEST_SOURCE_PATH${SAMPLE_ROOT_PATH}/test)SET(SAMPLE_BIN_PATH${SAMPLE_ROOT_P

c++ - 如何在不实例化类型的情况下确定两种 C++ 类型?

我有以下问题:我想在不实际评估“结果”类型的情况下确定两种类型-因为该类型可能根本不存在-是无效的。(请不要使用C++11的东西)例子:#include#includetemplatestructTemplateIf{};templatestructTemplateIf{typedefTResult;};templatestructTemplateIf{typedefFResult;};intmain(intargc,char**argv){//OnGCCthisiserrorasstd::iterator_traits::value_typedoesn'texisttypenameT