Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В что такое "explicit"? 
V
    Опции темы
Antropoid
Дата 27.7.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Собственно вопрос озвучен. 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
DukeCpp
Дата 27.7.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 27.2.2006
Где: St.Petersburg

Репутация: нет
Всего: 1



Это ключевое слово, стоящее перед конструктором запрещает при создании объекта выполняемое неявно преобразование типа при присваивании другого типа; 
PM   Вверх
_hunter
Дата 27.7.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



это слово. предположительно из английского языка. на русский переводится как 
Цитата

1. заключение, конец, последние слова (в конце книги)
2.
  1) ясный, подробный; подробно разработанный; высказанный до конца; явный; определенный, точный ( about)
  2) явный
  3) искренний, откровенный, открытый, прямой

если подразумевалось keyword из C/C++:
Цитата

This keyword is a declaration specifier that can only be applied to in-class constructor declarations. An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object. 

The following program will fail to compile because of the explicit keyword. To resolve the error, remove the explicit keywords and adjust the code in g.

// spec1_explicit.cpp
// compile with: /EHsc
#include <stdio.h>
class C 
{
public:
   int i;
   explicit C(const C&)   // an explicit copy constructor
   {
      printf("\nin the copy constructor");
   }
   explicit C(int i )   // an explicit constructor
   {
      printf("\nin the constructor");
   }


   C()
   {
      i = 0;
   }
};

class C2
{
public:
   int i;
   explicit C2(int i )   // an explicit constructor
   {
   }
};

C f(C c)
{   // C2558
   c.i = 2;
   return c;   // first call to copy constructor
}

void f2(C2)
{
}

void g(int i)
{
    f2(i);   // C2558
   // try the following line instead
   // f2(C2(i));
}

int main()
{
   C c, d;
   d = f©;   // c is copied
}
Note   explicit on a constructor with multiple arguments has no effect, since such constructors cannot take part in implicit conversions. However, for the purpose of implicit conversion, explicit will have an effect if a constructor has multiple arguments and all but one of the arguments has a default value.

 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
sergejzr
Дата 27.7.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Вообще какие либо действия бываю  explicit  или implicit
implicit  означает импликацию действия, то есть его автоматически пораждает другое действие.
Например: Дёрнешь за верёвочку - двери откроются. Действие "Дёрнешь за верёвочку" имплицирует "двери откроются".

Explicit- значит преднамеренно. То есть можно например explicit  открыть дверь без дёргания верёвочек.

По этой аналогии, если чтото определяется Explicit значит отключена вся автоматика. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Antropoid
Дата 27.7.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Очень путано и ничего не понятно smile , попроще бы! smile  


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Sunr1se
Дата 27.7.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 1.5.2006

Репутация: 1
Всего: 13



Antropoid, ну смотри:
есть у класса конструктор:
Код

Test(int);

Мы хотим создать объект a:
Код

Test a = 42;

Сначала вызывается конструктор с параметром 42. Конструктор создает объект. Этот объект присваивается объекту a.
А вот если мы объявим конструктор вот так:
Код

explicit Test(int);

И попробуем создать объект a так же, как делали это раньше, то ничего не выйдет. Потому что благодаря explicit не произойдет автоматического вызова конструктора. Правильно будет вот так:
Код

Test a = Test(42);
 
--------------------
IRC-канал Винграда 
PM MAIL ICQ   Вверх
Earnest
Дата 27.7.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Sunr1se, ты не прав в данном случае.
Код

Test a = 42;

Здесь нет присваивания, это тоже конструирование из int (не надо заблуждаться на счет =), так что все будет работать.
Вот если написать:
Код

Test a;
a = 42;

то все остальное сказанное правильно. Кроме присваивания, переменные int нельзя передавать в функцию, ожидающую Test (а если не explicit - можно), и т.д. 


--------------------
...
PM   Вверх
Antropoid
Дата 28.7.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Ну вот теперь я все понял smile Всем бальшое спасибо! smile  


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.