如何防止从char到int的隐式转换?

pat*_*ork 1 c++

我有以下代码:

#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; 
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何防止从编译到char的隐式转换?(即这一行:`DynArray b('7');

Dav*_*vid 6

你不能直接,但是你可以重新构造一个在传递char时首先被选中的构造函数...

explicit DynArray(char);
Run Code Online (Sandbox Code Playgroud)

将其设为私有,不要定义它,只需声明它.与声明但未定义复制ctor/copy赋值运算符以防止类可复制相同.

或者,使用C++ 11,将其删除(这是更清洁/更清晰/更好的方法)...

explicit DynArray(char) = delete;
Run Code Online (Sandbox Code Playgroud)