close
2005/6/29 下午 12:10:50
 
int fun(const int a) 表示不可以修改a
int fun(int a) const 表示這個function可以讀取 const objet
請問
const int fun(int a)的const作用是什麼

問二

int fun(int a) const
這種作法是不是只有在class才能用ㄚ
class Time
{
int getHour() const;
}
 
 
作者 : kuobryan(Bryan) 
[ 貼文 39 | 人氣 5 | 評價 310 | 評價/貼文 7.95 | 送出評價 0 次 ] 
 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bjk註記此篇回應為最佳解答 2005/6/29 下午 02:39:14
 

>int fun(const int a) 表示不可以修改a
>int fun(int a) const 表示這個function可以讀取 const objet
>請問
>const int fun(int a)的const作用是什麼
>
>問二
>
>int fun(int a) const
>這種作法是不是只有在class才能用ㄚ
>class Time
>{
>int getHour() const;
>}
>

第一
const int fun(int a) 的 const 代表回傳的 int 變數為 const
所以要接受 fun 的回傳值的話..也要用 const int var 來接受
例如:
 const int ret_val = fun(x);

第二:
const function 只有在 class 中才能使用
 
 
作者 : bjk(Up2u) 貼文超過1000則人氣指數超過50000點
[ 貼文 1047 | 人氣 64249 | 評價 730 | 評價/貼文 0.7 | 送出評價 196 次 ] 
 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
  2005/6/29 下午 09:32:05
 
可是我這樣也能執行ㄟ

const int fun() 
{
return 10;
}
int main()
{
int a=fun();
a-5;
cout<<a;
system("PAUSE");
return 0;
}
 
 
作者 : anderson_fang(Anderson) UNIX/Linux優秀好手C++卓越專家貼文超過200則
[ 貼文 297 | 人氣 2 | 評價 3070 | 評價/貼文 10.34 | 送出評價 1 次 ] 
 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bjk註記此篇回應為最佳解答 2005/6/29 下午 11:51:05
 
return 值不給 const 的話表示該 return 值可以直接被更改
在極端的用法下會出鎚
像下面 main() 中的用法對 g() 來說是合理的而且可 compile
因為 g() 的 return 值不是 const
但真的跑下去會有 runtime error
而對 f() 來說則是較安全的 compile time error
把註解拿掉可得知

#include <iostream>

using namespace std;

const char* f() {return "Foo";}
char* g() {return "Bar";}

int main() {
// (f())[0] = 'a';
    cout << f() << endl;
    (g())[0] = 'a';
    cout << g() << endl;

    return 0;
}
 
 
作者 : avhacker(av) C++優秀好手貼文超過200則
[ 貼文 217 | 人氣 100 | 評價 1090 | 評價/貼文 5.02 | 送出評價 0 次 ] 
 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bjk註記此篇回應為最佳解答 2005/6/30 下午 03:14:50
 
因為你已把 fun( ) 傳回的值 copy 給 a 了. 而 a 並不是 const.
>可是我這樣也能執行ㄟ
>
>const int fun() 
>{
> return 10;
>}
>int main()
>{
> int a=fun();
> a-5;
> cout<<a;
> system('PAUSE');
> return 0;
>}
>
 
 
作者 : kuobryan(Bryan) 
[ 貼文 39 | 人氣 5 | 評價 310 | 評價/貼文 7.95 | 送出評價 0 次 ] 
 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bjk註記此篇回應為最佳解答 2005/7/2 下午 01:32:15
 

>int fun(const int a) 表示不可以修改a
>int fun(int a) const 表示這個function可以讀取 const objet
>請問
>const int fun(int a)的const作用是什麼
>
>問二
>
>int fun(int a) const
>這種作法是不是只有在class才能用ㄚ
>class Time
>{
>int getHour() const;
>}
>

試考慮以下情況
class A {
 . ....
   void doTest() const
   void doTest2();
};
class B {
  .....
  const A getClassA() {....}
};

int main()
{
  B objB;
  A objA = objB.getClassA(); // compile error,
  const A objA2 = objB.getClassA(); // compile ok
  objA2.doTest(); // compile ok
  objA2.doTest2(); // compile error
};

 int 變數接受 回傳 const int function 並不會有什麼問題
但若要接受回傳const的類別時, 則必需要以 const 物件來接受
 const 物件只能使用其 const member function
 
 
作者 : bjk(Up2u) 貼文超過1000則人氣指數超過50000點
[ 貼文 1047 | 人氣 64249 | 評價 730 | 評價/貼文 0.7 | 送出評價 196 次 ] 
 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
  2005/7/2 下午 03:05:22
 
謝謝各位大大的回答
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 學習程式 的頭像
    學習程式

    程式學習日記,如果我幫助了你請讓我知道

    學習程式 發表在 痞客邦 留言(0) 人氣()