相关疑难解决方法(0)

C++ 中对象方法的地址

据我所知,每个创建的对象都有自己的地址,每个对象的方法也有自己的地址。我想用以下想法来验证这一点:

步骤1:构建具有公共方法的类A,其名称为“method”。

步骤2:在A类中创建两个对象,它们是对象“b”和对象“c”。

步骤3:使用函数指针访问“b.method”和“c.method”的地址,检查它们是否相等。

但我在步骤3中遇到了问题,并找到了各种方法来解决但失败了。所以我在这里发帖请教大家如何验证我上面所说的。感谢大家!这是我的 C++ 代码:

#include<iostream>
using namespace std;
class A
{
  public:
     int a;
     void method()
     {
       //do something
     }
     static void (*fptr)();
};
int main()
{
    A b, c;

    A::fptr= &(b.method);  //error: cannot convert 'A::method' from type 
                           // 'void(A::)()' to type 'void (*)()'
    cout << A::fptr << endl;
    A::fptr= &(c.method);  //error: cannot convert 'A::method' from type  
                           //'void(A::)()' to type 'void (*)()'
    cout << A::fptr << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ oop

8
推荐指数
1
解决办法
5051
查看次数

为什么我不能将std :: function用作std :: set或std :: unordered_set值类型?

为什么我不能有一个std::setstd::unordered_setstd::functionS'

有什么方法可以让它工作吗?

c++ unordered-map stdset std-function

7
推荐指数
2
解决办法
881
查看次数

为什么两个函数具有相同的地址?

考虑这个功能模板:

template<typename T>
unsigned long f(void *) { return 0;}
Run Code Online (Sandbox Code Playgroud)

现在,我打印的地址f<A>f<B>为:

std::cout << (void*)f<A> << std::endl;
std::cout << (void*)f<B> << std::endl;
Run Code Online (Sandbox Code Playgroud)

如果在MSVS10中编译,为什么它们会打印相同的地址?它们不是两个不同的功能,因此应该打印不同的地址吗?

更新:

我意识到在ideone上,它会打印出不同的地址.MSVS10优化代码,因为函数不依赖T于任何方式,因此它产生相同的功能.@Mark的回答和对此的评论很有价值.:-)

c++ templates function memory-address function-templates

6
推荐指数
2
解决办法
479
查看次数

C++ 链接器是否删除了模板和内联函数中的重复代码?

模板和内联函数应在标头中提供,因此相同的代码将进入使用它们的每个翻译单元。

除非编译器选择实际将模板或内联代码放入内联,否则链接器最好删除每个翻译单元中出现的相同代码。这真的会发生吗?标准要求?还是由编译器决定?

c++

5
推荐指数
1
解决办法
1493
查看次数

反向设计一个虚拟方法,该方法仅在返回之前对EAX的低字节进行异或

我需要帮助从反汇编逆向工程虚拟方法.该代码最初使用Microsoft的Visual C++编译.有问题的方法如下:

sub_92D110    proc near
xor al, al
retn
sub_92d110    endp
Run Code Online (Sandbox Code Playgroud)

这个方法在很多类之间引用,甚至在一个类的vtable内多次引用.我不确定它的作用; 这是否意味着该方法被内联,但调用仍然保持vtable保持其大小?

如果是这样,那该怎么xor al, al办?我是否误解了召唤大会或其他什么?

c++ x86 assembly reverse-engineering

4
推荐指数
1
解决办法
132
查看次数