在C ++中使用显式关键字

在这里,我们将看到C ++中显式关键字的作用。在讨论之前,让我们看一个示例代码,然后尝试找出其输出。

示例

#include <iostream>
using namespace std;
class Point {
   private:
      double x, y;
   public:
      Point(double a = 0.0, double b = 0.0) : x(a), y(b) {
         //构造函数
      }
      bool operator==(Point p2) {
         if(p2.x == this->x && p2.y == this->y)
         return true;
         return false;
      }
};
int main() {
   Point p(5, 0);
   if(p == 5)
      cout << "They are same";
   else
      cout << "They are not same";
}

输出结果

They are same

这很好用,因为我们知道如果只能使用一个参数调用一个构造函数,那么它将被转换为转换构造函数。但是我们可以避免这种转换,因为这可能会产生一些不可靠的结果。

为了限制这种转换,我们可以在构造函数中使用显式修饰符。在这种情况下,它将不会被转换。如果使用显式关键字使用上述程序,则会生成编译错误。

示例

#include <iostream>
using namespace std;
class Point {
   private:
      double x, y;
   public:
      explicit Point(double a = 0.0, double b = 0.0) : x(a), y(b) {
         //构造函数
      }
      bool operator==(Point p2) {
         if(p2.x == this->x && p2.y == this->y)
         return true;
         return false;
      }
};
int main() {
   Point p(5, 0);
   if(p == 5)
      cout << "They are same";
   else
      cout << "They are not same";
}

输出结果

[Error] no match for 'operator==' (operand types are 'Point' and 'int')
[Note] candidates are:
[Note] bool Point::operator==(Point)

我们仍然可以使用显式强制转换将值转换为Point类型。

示例

#include <iostream>
using namespace std;
class Point {
   private:
      double x, y;
   public:
      explicit Point(double a = 0.0, double b = 0.0) : x(a), y(b) {
         //构造函数
      }
      bool operator==(Point p2) {
         if(p2.x == this->x && p2.y == this->y)
         return true;
         return false;
      }
};
int main() {
   Point p(5, 0);
   if(p == (Point)5)
      cout << "They are same";
   else
      cout << "They are not same";
}

输出结果

They are same