我有以下代码:

#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;

10-08 04:12