小编Ver*_*sed的帖子

为什么 C++ 编译器不能知道指针指向派生类?

我刚刚开始学习 C++ 中的 OOP。我想知道为什么需要使用 virtual 关键字来指示编译器进行后期绑定?为什么编译器在编译时不能知道指针指向派生类?

class A { 
    public: int f() { return 'A';}
};

class B : public A {
    public: int f() { return 'B';}
};

int main() {

    A* pa;
    B b;
    pa = &b; 
    cout << pa->f() << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction oop pointers

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

如果 C 是行优先顺序,为什么 ARM 内在代码采用列优先顺序?

我不确定问这个问题的最佳地点在哪里,但我目前正在使用 ARM 内在函数并遵循本指南:https : //developer.arm.com/documentation/102467/0100/Matrix-multiplication-example

但是,那里编写的代码假设数组是按列优先顺序存储的。我一直认为 C 数组是按行优先存储的。他们为什么要这样假设?

编辑:例如,如果不是这样:

void matrix_multiply_c(float32_t *A, float32_t *B, float32_t *C, uint32_t n, uint32_t m, uint32_t k) {
    for (int i_idx=0; i_idx < n; i_idx++) {
        for (int j_idx=0; j_idx < m; j_idx++) {
            for (int k_idx=0; k_idx < k; k_idx++) {
                C[n*j_idx + i_idx] += A[n*k_idx + i_idx]*B[k*j_idx + k_idx];
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

他们这样做了:

void matrix_multiply_c(float32_t *A, float32_t *B, float32_t *C, uint32_t n, uint32_t m, uint32_t k) {
    for (int i_idx=0; i_idx …
Run Code Online (Sandbox Code Playgroud)

c optimization matrix-multiplication neon row-major-order

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