Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++; 如果我在C++中创建一个简单的对象,那么返回成员的地址与返回指针之间的区别是什么?据我所知,C++没有自动垃圾收集,所以它不会保留引用计数。那么,为什么会有人这样做: class CRectangle { public: string& getName( ); int& getWidth( ); int& getHeight( ); private: string name; int height; int width; }; class CRectangle { public: string* getName( ); int* getWidth( ); int* getHeight( ); private: string name; int height; int width; };_C++_Pointers_Reference_Coding Style_Address Operator - Fatal编程技术网

C++; 如果我在C++中创建一个简单的对象,那么返回成员的地址与返回指针之间的区别是什么?据我所知,C++没有自动垃圾收集,所以它不会保留引用计数。那么,为什么会有人这样做: class CRectangle { public: string& getName( ); int& getWidth( ); int& getHeight( ); private: string name; int height; int width; }; class CRectangle { public: string* getName( ); int* getWidth( ); int* getHeight( ); private: string name; int height; int width; };

C++; 如果我在C++中创建一个简单的对象,那么返回成员的地址与返回指针之间的区别是什么?据我所知,C++没有自动垃圾收集,所以它不会保留引用计数。那么,为什么会有人这样做: class CRectangle { public: string& getName( ); int& getWidth( ); int& getHeight( ); private: string name; int height; int width; }; class CRectangle { public: string* getName( ); int* getWidth( ); int* getHeight( ); private: string name; int height; int width; };,c++,pointers,reference,coding-style,address-operator,C++,Pointers,Reference,Coding Style,Address Operator,而不是这样: class CRectangle { public: string& getName( ); int& getWidth( ); int& getHeight( ); private: string name; int height; int width; }; class CRectangle { public: string* getName( ); int*

而不是这样:

class CRectangle {
public:
    string& getName( );
    int&    getWidth( );
    int&    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};
class CRectangle {
public:
    string* getName( );
    int*    getWidth( );
    int*    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};

我意识到这些将允许您访问成员数据,但我不关心这个简单示例中的适当封装。那有什么区别呢?加速?可读性?样式?

在此上下文中,
&
表示引用,而不是地址

  • 在格式良好的程序中,指针可以是0-引用不能是
  • 当您返回指针时,所有权可能更不清楚
  • 可读性是主观的——我想说,在可能的情况下使用参考资料
  • 对于效率来说,没有什么真正的区别
    • 在本上下文中,
      并不表示“地址”

      声明为
      string&getName()的函数返回引用,而不是指针。引用本质上是另一个对象的别名。因此,在本例中,它不会返回对象名称的副本或指向名称的指针,而是返回对名称本身的引用。因此,对返回对象的任何更改都将直接应用于对象的名称

      您可以通过返回指针来实现同样的效果,但有两个显著的区别:

      • 指针需要特殊语法才能访问(
        *
        ->
        运算符),而引用的使用方式与对象本身的使用方式完全相同
      • 指针可以是空的,引用不能是空的。因此,每当使用指针时,您都在向代码读取器发送信号,表示“此值可能为
        null

      首先,C++中的表单被称为“引用”。*形式称为“指针”或 “地址”

      加速-没有区别。可读性-可能对引用有一点好处,在upstack代码中没有解除限制


      样式-显式破坏封装已经糟糕到足以阻止任何其他样式。如果您想要一个包含裸数据的对象,一个全公共结构也可以。

      从属性类型方法(如
      getWidth()
      )返回指向整数的指针没有任何好处。它增加了跟踪内存所有权的负担;但是实际上很可能会增加返回类型的带宽(int和指针大小都是特定于平台的,并且可以也确实不同,但是典型的大小分别是32位和64位)。

      嗨,我想知道,我是否声明
      CRectangle rec
      ,并调用
      rec.getName()
      ,作为他的第一个版本(通过引用返回),函数调用是否返回对rec的引用?我只是好奇
      字符串&
      引用的对象是什么?