我有以下代码:
#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到int的隐式转换编译? (即此行:`DynArray b('7');
最佳答案
您不能直接这样做,但是可以使构造函数重载,该构造函数在通过字符时首先被选择...
explicit DynArray(char);
将其设为私有(private)并且不定义它,只需声明它即可。与声明但未定义复制ctor /复制分配运算符以防止类可复制相同。
或者,使用C++ 11,将其删除(这是执行上述操作的新的更清晰/更清晰/更好的方法)...
explicit DynArray(char) = delete;