易失性超載?
回答
可以將揮發性數據應用於參數,但當直接應用於參數時,它不是過載的因素。但是可以使用它來區分參數的類型。例如,這是合法的:
void f(int &p) {}; //reference to int
void f(volatile int &p) {}; //reference to volatile int
這不是:
void f(int p) {};
void f(volatile int p) {};
的原因是,在第一個例子引用是不是有什麼波動,但整數。在第二個例子中,兩種類型都是整數,因此是相同的類型。
也有不穩定的方法。他們類似於宣稱this
是易變的。由於this
是一個指針,而不是包含類型本身,下面的內容也是合法的:
void c::f(int p) {};
void c::f(int p) volatile {};
它是所有相同的const
超載。
C++標準的相關部分是§13.1可重載聲明。來自C++ 11草案n3290:
參數聲明僅在存在或不存在const和/或volatile時是相同的。也就是說,在確定哪個函數正在被聲明,定義或調用時,忽略每個參數類型的const和volatile類型說明符。 [實施例:
typedef const int cInt;
int f(int);
int f(const int); // redeclaration of f(int)
int f(int) { /* ... */ } // definition of f(int)
int f(cInt) { /* ... */ } // error: redefinition of f(int)
- 端示例]
只有在參數類型規範的最外層的const和volatile類型說明符以這種方式被忽略;隱藏在參數類型規範中的const和volatile類型說明符是重要的,可用於區分重載函數聲明。特別地,對於任何類型的T,
pointer to T
,pointer to const T
,和pointer to volatile T
被認爲是不同的參數類型,因爲是reference to T
,reference to const T
,和reference to volatile T
。124)當參數類型包括功能類型,例如在參數類型的情況下是一個指向功能, const和volatile類型說明符在參數類型規格的用於最外層平內部功能類型 也被忽略。
這是一個很好的答案 – Pete 2012-04-20 12:43:40
下面是一個例子:
#include <iostream>
struct A {
void foo() {
std::cout << "in non-volatile" << std::endl;
}
void foo() volatile {
std::cout << "in volatile" << std::endl;
}
};
int main()
{
A a;
a.foo();
volatile A b;
b.foo();
}
b.foo()
將調用volatile
超載。如果struct A
對於foo
沒有易失性過載,則b.foo()
將無效。
沒那麼快。這個問題似乎是關於易失性參數,而這些不是超載的一個因素。 – 2012-04-20 08:51:43
這並不完全清楚 - 皮特已經發布了關於函數參數的答案。 – Mat 2012-04-20 08:55:05
我很好,但@Pete也沒有給出完整的答案。也許我們應該鞏固。 – 2012-04-20 09:29:50
寫一個測試程序找出來。
void func(const int& a)
{
std::cout << "func(const)" << std::endl;
}
void func(const volatile int& a)
{
std::cout << "func(const volatile)" << std::endl;
}
int main()
{
const int a = 0;
const volatile int b = 0;
func(a);
func(b);
system("pause");
return 0;
}
將輸出:
func(const)
func(const volatile)
- 1. 易失性的int?
- 2. 易失性函數
- 3. 易失性寫入非易失性寫入重新排序
- 4. 聯鎖和易失性
- 5. 易失性和同步
- 6. 易失性結構語義
- 7. 易失性和多線程?
- 8. Java易失性數組?
- 9. Java易失性讀取刷新寫入和易失性寫入更新讀取
- 10. 春季AOP交易 - 屬性超時?
- 11. 爲什麼在android中lockStatic易失性?
- 12. 易失性成員的訪問方法
- 13. arduino線程更新易失性變量
- 14. 優化易失性數據查詢
- 15. C - 使用易失性指針
- 16. 同步在一起的易失性
- 17. Java - 易失性不按預期工作
- 18. C中的非易失性對象#
- 19. 易失性的成員函數和const
- 20. C易失性內存模型
- 21. 方法中是否需要「易失性」?
- 22. 線程安全無易失性
- 23. 正確使用易失性sig_atomic_t
- 24. 運算符超載的性能損失是多少STL
- 25. PHP自動屬性/超載
- 26. 方法超載的性能
- 27. 失敗登錄時Authlogic易失性令牌重置
- 28. Java對於併發性而言是易失性的
- 29. Java如何管理易失性字段的可見性?
- 30. Java中的易失性關鍵字 - 說明性
添加C++標籤;如果這不是你正在談論的語言,請編輯你的問題以提及相當重要的事實並適當地重新標記。 – Mat 2012-04-20 08:17:17
這與'const'類似,如果你有一個'volatile'限定對象,那麼只能調用'volatile'函數。 – 2012-04-20 08:19:48
哦,我滑了我的腦海 – 2012-04-20 08:25:53