powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как сделать шаблонным оператор []?
11 сообщений из 36, страница 2 из 2
Как сделать шаблонным оператор []?
    #39634637
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА как по-вашему работает вот это?
Код: plaintext
1.
2.
std::map<std::string, int> m;
m["a"] = 1;

Потрясающе!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
struct TEST
{
  char* value;

  __INLINE
  __fastcall TEST(const char* src)
  {
    size_t len = ::strlen(src);
    if (len)
    {
      this->value = (char*)::malloc(++len);
      if (NULL != this->value)
        ::memcpy(this->value, src, len);
    }
    else
      this->value = NULL;
  }

  __INLINE
  __fastcall ~TEST()
  {
    ::free(this->value);
  }
};

#pragma argsused
int __cdecl main(int argc, char* argv[])
{
  volatile TEST && test = "The test message";
  printf("The test message: %s", test.value);
  return 0;
}

Автоматическая инициализация временного объекта по дедукции соответствующего конструктора и инициализация rvalue ссылки на этот объект. Я в шоке! Никак не могу найти хорошее и подробное описание этого поведения.
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39634715
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЯ в шоке!
Надеюсь вы всю жизнь не писали std::string("a")

rdb_devНикак не могу найти хорошее и подробное описание этого поведения.
Выше была ссылка на место в стандарте.

Если кратко, то при присвоении или вызове функции, если типы не совпадают, то производится неявное преобразование (через конструктор или оператор преобразования типа).
Образованное при этом временное значение можно присвоить значение того же типа либо в константную ссылку этого типа.

Вот и все.
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39634738
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВыше была ссылка на место в стандарте.Ага, разглядел ! :)
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39634764
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНадеюсь вы всю жизнь не писали std::string("a") Неоднозначность поведения при неявном преобразовании и перегрузке операторов, это то, что меня всегда бесило в C++.
Порой начинаешь скучать по ассемблеру.
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39636504
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devAnatoly MoskovskyВыше была ссылка на место в стандарте.Ага, разглядел ! :)А подробнее, какой подпункт сработает и почему?
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39636505
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devкаким образом "a" из const char*"a" это не const char*, а const char[2].
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39636870
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest"a" это не const char*, а const char[2].Не вижу разницы...
что
Код: plaintext
1.
const char *test = "a";

что
Код: plaintext
1.
const char test[] = "a";

одинаково.
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39636871
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разницу "почувствует" лишь sizeof(). :)
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39636874
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guestА подробнее, какой подпункт сработает и почему?
Ответ очевиден из приведенного мной примера: 21360233

P.S. Если ты сам скинул ссылку на нужный раздел черновика стандарта, зачем переспрашивать? :)
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39636978
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devРазницу "почувствует" лишь sizeof(). :)Думаю, правила инициализации ссылок тоже почувствуют.

rdb_devP.S. Если ты сам скинул ссылку на нужный раздел черновика стандарта, зачем переспрашивать? :)Да так, просто любопытно, ткнёт ли человек, считающий, что тип у "a" это const char*, в правильный пункт.
...
Рейтинг: 0 / 0
Как сделать шаблонным оператор []?
    #39637065
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guestДа так, просто любопытно, ткнёт ли человек, считающий, что тип у "a" это const char*, в правильный пункт.Пытаешься намекнуть, что const char* не является типом строкового литерала? :)
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как сделать шаблонным оператор []?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]