不带参数的重载圆括号运算符功能名称
Overloaded Parenthesis operator with no arguments feature name
维基百科关于属性的文章提供了一个模板类,可以用来创建属性成员(经过轻微编辑):
template <typename T> class property {
T value;
public:
T & operator = (const T &i) {
return value = i;
}
operator T const & () const {
return value;
}
};
struct Bar {
// Using the property<>-template.
property <bool> alpha;
property <unsigned int> bravo;
};
int main () {
Bar bar;
bar.alpha = true;
return bar.bravo;
}
我想弄清楚的是C++特性的名称,它允许bar.bravo
存在,并且没有尾随的()
。
代码编译得很好。。。我只是不知道为什么!
谷歌搜索让我想到了"Functors",但那些重载的parens运算符似乎都有争论(我能理解它们是如何工作的)。
这:
operator T const & () const {
return value;
}
是一个重载的转换运算符。因为它不是explicit
,所以它允许隐式转换。
类property<T>
定义了一个"隐式转换为T const &
"运算符:
operator T const & () const { return value; }
因此,您可以将property<T>
类型的值转换为T
类型的值(更具体地说,转换为T
类型的常量左值)。
相关文章:
- C++ - 没有自定义交换功能的移动分配运算符?
- C++语法运算符功能?
- 主功能外的新运算符 - C++
- 在功能块中使用新运算符时存在于堆或堆栈上?
- 预处理器是否可以更改运算符重载功能的符号?
- 插入运算符的过载与使用二传手功能相比
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- C++的新增功能:创建 2D 数组并具有正确的赋值运算符:分割错误
- 使用运算符读取文件和使用读取功能>>文件有什么区别?
- 使用赋值运算符功能按距离对数组对象进行排序
- C 超载相等运算符.我应该写自己的功能以接受通过参考或值传递的参数
- 在使用C 中使用多个三元运算符时,BOOL和ENUM类型超载的功能没有区分
- 如何通过运算符<<的重载访问受保护的功能?C++
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- 错误 C2582:"运算符 ="功能不可用
- C++功能运算符结构不执行任何操作
- C 是否会用功能调用代替内置运算符
- 超载功能运算符
- 如何重载iostream运算符以在整个流上执行功能
- 不带参数的重载圆括号运算符功能名称