易失性超载?
回答
可以将挥发性数据应用于参数,但当直接应用于参数时,它不是过载的因素。但是可以使用它来区分参数的类型。例如,这是合法的:
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