小编李亮節*_*李亮節的帖子

关于派生类的成员函数的指针

这是我的代码,IDE是DEV C++ 11

#include<iostream>
using namespace std;

class A{
    public:
        int a=15;
};
class B:public A
{

};
int main(){

    int A::*ptr=&B::a; //OK
    int B::*ptr1=&A::a; //why?
    int B::A::*ptr2=&B::a;//why?
    int B::A::*ptr3=&A::a;  //why?

} 
Run Code Online (Sandbox Code Playgroud)

我读过Programming Languages - C++,我知道&B::ais 的类型int A::*,但我不明白为什么接下来的三行会通过编译.而对我来说最奇怪的是它的语法 int B::A::*,这是什么意思?我只是一个新人C/C++,所以请容忍我的奇怪问题.

c++ pointers member-functions derived-class

6
推荐指数
1
解决办法
172
查看次数

对于X86_64 linux的程序集中标签的使用感到困惑:我们为什么要编写mov [digit],al,而不是mov digit,al?

这是我的代码:

section .data
    digit db 0,10

section .text
    global  _start
_start:

    call _printRAXDigit

    mov rax, 60
    mov rdx, 0
    syscall


_printRAXDigit:
    add rax, 48
    mov [digit], al

    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 2
    syscall
    ret
Run Code Online (Sandbox Code Playgroud)

我有一个关于之间的差异问题[digit]digit.

我已经知道标签(如代码中的数字)代表数据的内存地址,而运算符"[]"就像取消引用指针一样,因此它会将标签指向的值加载到目标.

例如,mov rax, [digit] 将0抛出到rax寄存器,因为数字指向数据的第一个元素(在本例中为整数0).

但是,在我的代码中,它在我写入时起作用mov [digit], al,这意味着"将存储的值加载al到内存地址数字 ",但我不知道为什么在这种情况下我们应该使用"[]".第一个参数mov必须是目的地(如寄存器或内存地址),所以我认为它应该是mov digit, al而不是mov [digit], al.对我来说,为什么我们使用一个值从另一个地方获取值而不是使用内存地址来获取值是没有意义的.

这就是我的全部问题.请给我任何关于我的想法错误或对我的标签概念的任何更正的回应.

linux x86 assembly nasm

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

标签 统计

assembly ×1

c++ ×1

derived-class ×1

linux ×1

member-functions ×1

nasm ×1

pointers ×1

x86 ×1