我有以下代码:
#include <iostream>
template<typename T> class DynArray
{
T *contents;
int size;
public:
explicit DynArray(int initial_size);
};
int main()
{
DynArray<std::string> b('7');
return 0;
}
我的问题是:如何防止从编译到char的隐式转换? (即这一行:`DynArray b('7');
答案 0 :(得分:6)
你不能直接,但是你可以重新构造一个在传递char时首先被选中的构造函数...
explicit DynArray(char);
将其设为私有,不要定义它,只需声明它。与声明但未定义复制ctor / copy赋值运算符以防止类可复制相同。
或者,使用C ++ 11,将其删除(这是更清洁/更清晰/更好的方法)......
explicit DynArray(char) = delete;