c++中的操作符T* (T是模板形参)是什么?
What is operator T* (where T is a template parameter ) in C++?
class NullClass{
public:
template<class T>
operator T*() const {return 0;}
};
我在读Effective c++的时候遇到了这个类,我实现了这个类,它编译了。我对此有一些疑问:
没有返回类型
和它的实际作用
这是类型转换操作符。它定义了类的实例和指定类型(这里是T*
)之间的隐式转换。其隐式返回类型当然是相同的。
这里,当提示NullClass
实例转换为任何指针类型时,将产生从0
到该类型的隐式转换,即该类型的空指针。
可以显式地使用转换操作符:
template<class T>
explicit operator T*() const {return 0;}
这避免了隐式转换(这可能是一个微妙的bug来源),但允许使用static_cast
。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 当实参是初始化列表而形参是引用时,重载解析
- c++中的操作符T* (T是模板形参)是什么?
- const迭代器的模板形参,而不是迭代器
- c++形参是一个指向常量对象的指针,但不返回更新后的对象
- 将所有引用形参设为const的理由是什么?
- 模板形参的模糊模板重载是一个容器
- 将vector传递给函数时,默认实参(如果有的话)应该是什么?
- 通过函数实参而不是模板形参获取元组的元素
- c++ 11的构造函数中的花括号形参是什么?
- 在c++中,(void)在形参中做什么?
- 传递给构造函数的形参不是类型
- 类的模板形参,该类也是模板形参
- 模板形参中的类指针——这有什么用?
- 放形音频的正确公式是什么?
- 为什么在形参中使用initializer_list而不是vector ?
- 指针形参和数组形参有什么区别?