我有以下代码:
#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');
你不能直接,但是你可以重新构造一个在传递char时首先被选中的构造函数...
explicit DynArray(char);
Run Code Online (Sandbox Code Playgroud)
将其设为私有,不要定义它,只需声明它.与声明但未定义复制ctor/copy赋值运算符以防止类可复制相同.
或者,使用C++ 11,将其删除(这是更清洁/更清晰/更好的方法)...
explicit DynArray(char) = delete;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |