Прочитав эту статью, я заметил, что int ()
возвращает 0, потому что временное int
инициализировано. и не потому, что int ()
вызывает конструктор по умолчанию для int
. (Статья ошибочна, насколько я понимаю.)
Я также сказал, что примитивные (встроенные) типы нет конструкторов. Первоначальный автор попросил меня проверить Раздел $ 10.4.2 (TC ++ PL), в котором говорится, что
Встроенные типы также имеют конструкторы по умолчанию ($ 6.2.8)
. Но я все еще думаю, что утверждение «C ++ позволяет даже создавать -в типе (примитивные типы), чтобы иметь конструкторы по умолчанию ». ошибочен (согласно C ++ 03).
Я думаю, что Бьярн в TC ++ PL перепутал "конструктор, подобный нотации, т.е. ()
" с фактическим вызовом конструктора. Инициализация значений не была введена в то время, когда Бьярн писал книгу, верно? Так является ли текст в TC ++ PL неверным согласно C ++ 98 и C ++ 03?
Что вы думаете, ребята?
РЕДАКТИРОВАТЬ
Я лично спросил Бьярна (по почте) относительно некорректного текста в TC ++ PL, и это был его ответ
Я думаю, вы смешиваете «фактические вызовы конструктора» с концептуальным наличием конструктора. тип печати (f) print u "f =% s"% (f) Вот мой запуск программы: $ python x.py 'Recent / רשימת משתתפים. LNK' Traceback (...
Вот небольшая программа:
import sys f = sys.argv[1] print type(f) print u"f=%s" % (f)
Вот мой запуск программы:
$ python x.py 'Recent/רשימת משתתפים.LNK'
Traceback (most recent call last): File "x.py", line 5, in print u"f=%s" % (f) UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 7: ordinal not in range(128) $ Проблема в том, что sys.argv [1] думает, что получает строку ascii, которую он может не конвертирую в Unicode. Но я использую Mac с терминалом, полностью поддерживающим Unicode, поэтому
x.py
фактически получает строку Unicode. Как мне сообщить Python, что sys.argv [] является Unicode, а не Ascii? В противном случае, как мне преобразовать ASCII (в котором есть Unicode) в Unicode? Очевидные преобразования не работают.