在C++ 11中,建议:

  • 显式定义我们自己的复制/移动构造函数,以便编译器本身不执行此操作(根据 [1])。
  • 显式地将单参数构造函数声明为显式,以避免隐式转换(根据 [2])。

  • 在这种思路下,是否应该声明转换运算符explicit以防止编译器使用它们执行隐式转换?

    最佳答案


    谁提出这个建议,那都是错误的。只要默认实现适合您的需求,就使用它。您可能自己不会更好。

    C++ Core Guidelines说“默认情况下,声明单参数构造函数explicit”。在某些情况下,您可能希望使用隐式构造(例如std::string来自const char*)。在这种情况下,请省略explicit声明。

    明确地表达它们没有什么好处。这意味着该转换只能与强制转换一起使用。强制转换比getter函数调用更难读。写转换运算符,当您要隐式转换时,写getters当您要显式转换时。

    10-08 08:37