将StringBuilder构造函数标记为显式我认为我无法传递,char*但似乎我可以编译就好了.
class StringBuilder {
public:
// StringBuilder(const char *);
explicit StringBuilder(std::string s) {}
};
int main() {
StringBuilder s1("hello");
StringBuilder s2(std::string("hello"));
}
Run Code Online (Sandbox Code Playgroud)
Zde*_*vic 10
basic_string采用字符指针的构造函数不是explicit:
basic_string( const CharT* s, Allocator& alloc = Allocator() );
Run Code Online (Sandbox Code Playgroud)
这意味着为函数提供char指针string将隐式创建一个字符串并将其传递给函数.
你是StringBuilder明确的,这意味着它不可能隐式转换string为StringBuilder,即如果你传递string给一个StringBuilder作为参数的函数,它将无法编译.
编辑:如@Revolver_Ocelot所述,您可以将违规构造函数(StringBuilder(const char*))声明为已删除,以防止其被使用.如果你不能使用C++ 11,你只需要声明与private相同的构造函数并省略定义(实现):
class StringBuilder
{
public:
explicit StringBuilder(const std::string& s) {}
// for C++11 use this:
StringBuilder(const char*) = delete;
// otherwise use this:
private:
StringBuilder(const char*); // no implementation
};
Run Code Online (Sandbox Code Playgroud)