可以优化C类内部参考的存储吗?

C语言是否允许以下​​代码打印,例如1而不是16?根据其他答案,我猜是的,但这个案例似乎没有被覆盖.
#include "iostream"
#include "cstdlib"
using namespace std;

struct as_array {
    double &a,&b;

    as_array(double& A,double& B)
        : a(A),b(B) {}

    double& operator[](const int i) {
        switch (i) {
        case 0:
            return this->a;
            break;
        case 1:
            return this->b;
            break;
        default:
            abort();
        }
    }
};

int main() {
    cout << sizeof(as_array) << endl;
}

解决方法

标准在[dcl.ref]下说:

It is unspecified whether or not a reference requires storage

此外,由编译器决定对象的大小,因此您可以在此处获得任何非零数字.

还有as-if规则(也称为优化权限).因此,当且仅当使用引用的方式需要时,编译器才能将存储用于这些引用是合法的.

说了这么多;为了获得稳定的ABI,我仍然希望编译器为这些引用分配存储.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...