相关疑难解决方法(0)

为什么引用数组是非法的?

以下代码无法编译.

int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};
Run Code Online (Sandbox Code Playgroud)

C++标准对此有何看法?

我知道我可以声明一个包含引用的类,然后创建该类的数组,如下所示.但我真的想知道为什么上面的代码不能编译.

struct cintref
{
    cintref(const int & ref) : ref(ref) {}
    operator const int &() { return ref; }
private:
    const int & ref;
    void operator=(const cintref &);
};

int main() 
{
  int a=1,b=2,c=3;
  //typedef const int &  cintref;
  cintref arr[] = {a,b,c,8};
}
Run Code Online (Sandbox Code Playgroud)

可以使用struct cintref而不是const int &模拟引用数组.

c++ arrays reference

135
推荐指数
8
解决办法
9万
查看次数

类变量:公共访问只读,但私有访问读/写

哎呀,暂时不在那个套接字库上工作.我正在尝试用C++教育自己一点.

对于类,有没有办法让变量只读公开,但私有访问时读取+写入?例如:

class myClass {
    private:
    int x; // this could be any type, hypothetically

    public:
    void f() {
        x = 10; // this is OK
    }
}

int main() {
    myClass temp;

    // I want this, but with private: it's not allowed
    cout << temp.x << endl;


    // this is what I want:

    // this to be allowed
    temp.f(); // this sets x...

    // this to be allowed
    int myint = temp.x;

    // this NOT to be allowed
    temp.x …
Run Code Online (Sandbox Code Playgroud)

c++ access-modifiers

52
推荐指数
4
解决办法
4万
查看次数

如何用C++编码引用?

int x = 10;
int& y = x;
Run Code Online (Sandbox Code Playgroud)

为此,x在堆栈上分配为2/4/8字节,并将00 ... 1010写入这些字节.内存布局及其内容会是什么样的y

c++ types reference

13
推荐指数
3
解决办法
751
查看次数

引用是存储在堆还是堆栈上?

我想知道参考变量是否c在这段代码中:

int a = 5;
int & c = a;
Run Code Online (Sandbox Code Playgroud)

从堆或堆栈分配.有人可以帮忙吗?谢谢

c++ memory-management reference

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

引用实际上会占用内存吗?

读完这个答案后,我不太确定引用是否确实占用内存。我发现当编译器用引用的变量替换引用时,它不会占用内存,就像用引用的变量交换引用一样。

然而,

在一般情况下,编译器通常将引用实现为指针。但他们通常有更多关于参考可能指向的信息,并将其用于优化。

由于指针确实占用内存,那么由于编译器将其设置为指针,该引用现在不会导致占用内存吗?在编译器选择使引用成为指针而不是仅仅交换它的情况下,可以说引用实际上确实占用了内存,但以一种稍微隐式的方式?

事实上,编译器什么时候选择将引用实现为指针而不是交换,或者编译器之间的情况不同?

c++ pointers reference

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

派生类比基类大,即使它由引用变量组成

从我到目前为止所读到的,似乎参考变量根本不应该占用任何内存.相反,它们被视为它们引用的完全相同的变量,但具有另一个名称.

但是,当我运行以下代码时,似乎并非总是如此:

#include <cstdio>
struct A
{
    int m[3];
};
struct B: A
{
    B():x(m[0]), y(m[1]), z(m[2]){}
    int& x;
    int& y;
    int& z;
};
int main(){
    printf("%u, %u\n", sizeof(A), sizeof(B));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

12, 40
Run Code Online (Sandbox Code Playgroud)

为什么B比A大得多?

有没有其他方法可以访问,例如Bm [0]与Bx?

c++

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

为什么引用作为类的成员会占用内存?

有人告诉我,当引用是类的数据成员时,它们会占用内存,因为它们将被编译器转换为常量指针。这是为什么?就像为什么编译器(我知道它通常是特定于实现的)在它们是类的一部分时而不是在它们是临时变量时将引用作为指针?所以在这段代码中:

class A{
public:
  A(int &refval):m_ref(refval){};
private:
  int &m_ref;
}
Run Code Online (Sandbox Code Playgroud)

m_ref 将被视为常量指针(即它们确实占用内存)。

然而,在这段代码中:

void func(int &a){
  int &a_ref = a;
}
Run Code Online (Sandbox Code Playgroud)

编译器只是用实际变量替换引用(即它们不占用内存)。

因此,为了简单一点,我的问题基本上是:当常量指针是数据成员时,比它们是临时变量时,对它们进行引用更有意义吗?

c++

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

为什么引用相同的常量会占用C++中不同的内存空间?

我对C++中引用的想法不熟悉,我有一个关于引用纯数字常量的内存分配的问题.(我想先检查的另一件事是我怀疑const引用,我经常遇到它,意味着引用const,但我不确定.)

这是我在ideone.com上的测试:

#include <stdio.h>

int main() {

    const int r0 = 123;
    const int &r1 = 123;
    const int &r2 = 123;
    const int &r3 = r2;

    printf("%p\n", (void *)&r0);
    printf("%p\n", (void *)&r1);
    printf("%p\n", (void *)&r2);
    printf("%p\n", (void *)&r3);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

0x7ffee3bd74c4
0x7ffee3bd74c8
0x7ffee3bd74cc
0x7ffee3bd74cc
Run Code Online (Sandbox Code Playgroud)

原因与此答案清楚r2相同- C++参考如何看待内存?,这说它取决于编译器.但是我在想,为什么编译器不也令,,都是一样的,因为所有具有相同的纯恒定值.(如果没有错误的搜索,则称为prvalue)r3r0r1r2123

作为一个注释:经过对该网站的一些搜索,我发现了一个最相关的问题 - 但在python中.虽然不同的语言,但我认为这个想法应该是相同/相似的:从链接,如果我的程序是用python编写的,那么123在内存空间中只有一个用于节省空间.

我读过的其他一些答案:

  1. C++做引用占用内存:这个答案表明如果有必要那么int &x实现为*(pointer_to_x) …

c++ reference

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

引用是否在c ++中被视为指针

引用是否被视为c ++中的指针?

int &x = y;
Run Code Online (Sandbox Code Playgroud)

x在内存中有空格吗?

c++ pointers reference

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