Форум программистов, компьютерный форум CyberForum.ru

неоднозначность, explicit - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
01.02.2010, 00:50     неоднозначность, explicit #1
Добрый вечер.
написал такой шаблонный класс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T> class Container 
{
    private:
    ......
    public:
    Container(const int _dim, ...);
 
    Container (Container & cs);
 
    ~Container ();
    
    Container & operator = (Container  & sc);
    
    Container & operator[](int index);
    
    operator T & ();
};
пытаюсь его использовать так:

C++
1
2
Container<int> A(3,10,10,10); // кубик 10*10*10
A[5][5][5] = 18;
всё хорошо. А приводиться к int. хотя 18 также можно привести к контейнеру. почему тут нет не разрешимости?

если же написать так:


C++
1
2
3
Container<int> A(3,10,10,10); // кубик 10*10*10
int i = 18;
A[5][5][5] = i;


вижл студия пишет что " 'operator =' is ambiguous ".
хорошо. добавляю перед обоим конструкторами 'explicit'.
НИЧЕГО не меняеться. почему?
всё же однозначно: А приводиться к целому.

дальше больше.


C++
1
2
3
4
Container<int> A(3,10,10,10); // кубик 10*10*10
int i = 18;
int j = 20;
A[5][5][5] = i * j;


снова работает. и с 'explicit' и без.

и это всё и на вижл студии 6.0 и 2008...
буду ОЧЕНЬ рад хоть какому-то ответу... намёку...хоть как-то..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2010, 00:50     неоднозначность, explicit
Посмотрите здесь:

explicit и последствия. C++
inline explicit C++
Целевой explicit конструктор C++
компилятор находит неоднозначность при вызове round(i) C++
C++ Неоднозначность и multiple inheritance
C++ Неоднозначность при наследовании
C++ Explicit и его назначение
Неоднозначность переменной count C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.02.2010, 09:33     неоднозначность, explicit #2
Цитата Сообщение от ZigaZaga Посмотреть сообщение
вижл студия пишет что " 'operator =' is ambiguous ".
хорошо. добавляю перед обоим конструкторами 'explicit'.
ну и как связаны operator= и explicit перед конструкторами?
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
01.02.2010, 10:17  [ТС]     неоднозначность, explicit #3
Цитата Сообщение от zim22 Посмотреть сообщение
ну и как связаны operator= и explicit перед конструкторами?
опять же. как я понимаю компилятор не может решиться - понизить контейнер до int, или привести int к контейнеру.
по моему мнению использование explicit должно привести к тому, что исчезнет неопределенность, т.к.
становиться невозможно вызвать конструктор не явно. а
C++
1
A[4][4][4] = i;
- это и есть не явно.
Yandex
Объявления
01.02.2010, 10:17     неоднозначность, explicit
Ответ Создать тему
Опции темы

Текущее время: 06:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru