網頁

2014年12月20日 星期六

C++ &(and) 與 const

Last Updat: 2014/12/20 15:03+08
Type: Note



測試 C++ 的 & 與 const


雖然 先宣告個class, 但請從main function 看起吧
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <map>

class Vec2D {
public:
 Vec2D() :
   x(0), y(0) {
 }
 Vec2D(int x, int y) :
   x(x), y(y) {
 }
public:
 int mht_dist() const { // const代表此function不可以修改Data Member
  //this->x++; // Compiler Error! x為Data Member,因此不可以修改
  return this->x + this->y;
 }
 void func1(const Vec2D &v) {
  //v.x++; // Compiler Error! parameter 宣告成 const, 不能被修改
  //常配合 '&' 出現, 表示 我不會動你的物件, 安心傳給我
  //若不加 '&', 表示 call by value, 加了 const 好像就有點多餘
  printf("%p, %p\n", this, &v);
 }
 void func2(Vec2D &v) {
 }
 Vec2D& func3() {
  //會回傳物件, 而不會copy, 這有點trick, 可以請教google
  return *this;
 }
 const Vec2D func4() {
  //不知道 return 加上 const 有什麼意義...
  //即使不能修改 return 值, 好像也沒什麼差別
  return *this;
 }
public:
 int x, y;
};
測試
int main(int argc, const char **argv) {
 Vec2D vec = Vec2D(1, 2);

 vec.func1(vec);
 vec.func1(Vec2D(3, 4));

 //vec.func2(Vec2D(3, 4)); //沒有const, 又用 '&' 是無法用這種方式傳進去
 vec.func2(vec);  //必須有變數

 printf("%p, %p\n", &vec, &vec.func3());  //收到的指標跟原來的物件相同

 return 0;
}



Reference

C++ - use of reference(&) or pointer(*) in function parameters


沒有留言:

張貼留言