Каково явное ключевое слово для в C++? [дубликат]

7
задан Community 23 May 2017 в 10:32
поделиться

2 ответа

Используется для украшения конструкторов; оформленный таким образом конструктор не может использоваться компилятором для неявных преобразований.

C ++ допускает до одного пользовательского преобразования, где «пользовательский» означает «посредством конструктора класса», например, в:

 class circle {
   circle( const int r ) ;
 }

  circle c = 3 ; // implicit conversion using ctor

компилятор вызовет здесь окружность ctor, constructinmg circle c со значением 3 для r .

явный используется, когда вы этого не хотите. Добавление явного значения означает, что вам придется явно построить:

 class circle {
   explicit circle( const int r ) ;
 }

  // circle c = 3 ; implicit conversion not available now
  circle c(3); // explicit and allowed
7
ответ дан 6 December 2019 в 21:09
поделиться

Ключевое слово явное предотвращает неявные преобразования.

// Does not compile - an implicit conversion from const char* to CImg
CImg image = "C:/file.jpg"; // (1)
// Does compile
CImg image("C:/file.jpg"); // (2)

void PrintImage(const CImg& img) { };

PrintImage("C:/file.jpg"); // Does not compile (3)
PrintImage(CImg("C:/file.jpg")); // Does compile (4)

Без ключевого слова явным операторы (1) и (3) будут компилироваться, потому что компилятор видит, что const char * может быть неявно преобразовано в CImg (через конструктор, принимающий const char * ). Иногда такое неявное преобразование нежелательно, потому что оно не всегда имеет смысл.

5
ответ дан 6 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: