|
|
Возраст: 37 C нами с 25.01.2005 Репутация: 133
|
|
Неоспоримым достоинством языка С++ является то, что он является языком одновременно и высокого и низкого уровней, что делает его незаменимым при разработке игр и других сложных и требовательных к производительности приложений.
P.S. Перед задаванием вопросов вроде "Что делает эта функция" настоятельно рекомендуется поизучать MSDN.
P.P.S. В ближайшее время выложу много литературы по этому вопросу.
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
seb писал(а): |
а чем тебе не понравилось декрементить end() ?
|
Кто-то когда-то мне сказал, что end() у list нельзя декрементить, потому что он, мол, реализуется нулевым указателем, а я, как дурак, поверил
Спасибо
|
|
|
|
|
|
|
|
Возраст: 44 C нами с 05.04.2005 Репутация: 121.1
|
|
chaser писал(а): |
Кто-то когда-то мне сказал, что end() у list нельзя декрементить, потому что он, мол, реализуется нулевым указателем, а я, как дурак, поверил
|
ну не важно как и чем оно реализуется, важно то что end() возвращает определённый итератор - а какой именно - можно узнать.
Судя по gcc 4.1.2 и выводу проги
#include <iostream>
#include <list>
#include <typeinfo>
using namespace std;
typedef list<int> List;
template <class>
void show_iter_type(Iter)
{
cout << typeid(typename Iter::iterator_category).name() << endl;
}
int main()
{
List l;
List::const_iterator i = l.end();
show_iter_type(i);
return 0;
}
|
seb@seb:~/progs/test/cpp/list-iterators$ ./test
St26bidirectional_iterator_tag | у std::list - bidirectional_iterator - это значит что он поддерживает как + + так и - -
|
_____________________________ IRC WeNet #programming
jid: seb2000@jabber.ru
|
|
|
|
|
|
|
Возраст: 44 C нами с 05.04.2005 Репутация: 121.1
|
|
странно... форум не даёт написать template (меньше)class Iter(больше) %)
|
_____________________________ IRC WeNet #programming
jid: seb2000@jabber.ru
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
Возник вопрос, касающийся вложенных классов. Согласно пункту 11.8.1 стандарта ISO/IEC 14882:1998(E),
Цитата: |
The members of a nested classes have no special access to members of an enclosing class, nor to classes of functions that have granted friendship to an enclosing class; the usual access rules (clause 11) shall be obeyed.
|
То есть, вложенный и содержащий его класс находятся в обычных отношениях.
Далее там же приводится пример с тремя ошибками:
class E {
int x;
class B { };
class I {
B b; //error: E::B is private
int y;
void f(E* p, int i)
{
p->x = i; //error: E::x is private
}
};
int g(I* p)
{
return p->y; //error: I::y is private
}
}; |
Компилятор g++ версий 4.1.2 и 3.3.6 ругается только на последнюю ошибку, а если закомментировать функцию int g(I* p), то вообще компилирует, даже не выдавая предупреждения при включенном -Wall.
Если указать ключи -std=c++98 и -pedantic, поведение g++ 4.1.2 не изменяется, а g++ 3.3.6 всё-таки выдает предупреждение:
test.cpp:6: warning: all member functions in class `E::I' are private |
Вопрос: это ошибка в компиляторе, новое веяние в языке или я чего-то не понимаю?
|
|
|
|
|
|
|
|
Возраст: 38 C нами с 02.03.2007 Репутация: 94.9
|
|
Бесплатный компилятор, что с него возьмешь
На самом деле не все компиляторы соответствуют стандарту. В этом вся проблема.
|
_____________________________ А ты готов умереть?
|
|
|
|
|
|
|
Возраст: 36 C нами с 22.01.2006 Репутация: 256.8
|
|
Eske2, хотя бы то, что им собирается 99% кода Linux дистрибутивов. Стандарт де факто...
Интересно как ICC себя ведёт с этим примером... Если аналогично - можно считать это новым веянием.
|
|
|
|
|
|
|
|
Возраст: 44 C нами с 05.04.2005 Репутация: 121.1
|
|
Eske2 писал(а): |
Бесплатный компилятор, что с него возьмешь
|
Бесплатность уже стала показателем качества ? Вот эти тоже бесплатные:
- Free Microsoft Visual C++ 2005 Express
- Borland C++ 5.5 Tools
- Intel C++ Compiler for Linux Non-Commercial Version
- Sun Studio Compilers and Tools
- Digital Mars C/C++ Compiler (Symantec C++ Replacement)
ps: Вы перепутали. gcc не бесплатный, а свободный.
|
_____________________________ IRC WeNet #programming
jid: seb2000@jabber.ru
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
Сам великий Comeau ведет себя точно так же, кстати. Наверное, новомодные поправки к стандарту.
Добавлено спустя 19 минут 19 секунд:
Это поведение компилятора, как оказалось, описано в C++ Defect Report #45 и, насколько я понял, скорее всего будет включено в стандарт.
|
|
|
|
|
|
|
|
Возраст: 34 C нами с 04.02.2006 Репутация: 40.2
|
|
Пишу Код на С++
Библиотеки подключены
void _tmain (int argc, LPTSTR argv[])
{
TCHAR buf[200];
HANDLE P1;
LPWIN32_FIND_DATA LP;
scanf("%s",buf);
P1=FindFirstFile(buf,LP);
if (P1==INVALID_HANDLE_VALUE) printf("\nINVALID_HANDLE_VALUE\n");
FindClose(P1);
system("PAUSE");
}
Так всё время у меня либо ошибка с памятью возникает , либо INVALID_HANDLE_VALUE. Ввожу и C:\\*.txt и C:\*.txt и просто директорию, всё равно не получается. Кто уже использовал эти функции для поиска может исправть мои ошибки? или кто-нибудь знает другой способ поиска файлов?
Буду признателен, если ответы будут соответствовать вопросу.
Moderation by baldahin @ 29 Авг 2007, 17:26: |
перенесено в соответствующую тему |
|
_____________________________ НаправляЕмый собствЕнной тЕнью. вот так.
|
|
|
|
|
|
|
C нами с 15.04.2005 Репутация: 133.2
|
|
Проблема в невалидном указателе LP. Неужели используемый компилятор не выдаёт что-то вроде "Warning: Possible use variable without initialization" на строчке P1=FindFirstFile(buf,LP);. Неинициализирован указатель (и память не выделена).
И к тому же, если Вы уж получили ошибку то неплохо посмотреть что возвращает GetLastError, скорее всего там будет что нибудь о неправильном аргументе, либо неверном адресе. (проще всего в Watch list VS, если Вы, конечно, пользуетесь студией забить такую конструкцию: @err, hr, это будет LastError и текстовая мессага, если он её найдёт).
Можно предложить такие модификации:
LPWIN32_FIND_DATA LP; => WIN32_FIND_DATA LP;
...
P1=FindFirstFile(buf,LP); => P1=FindFirstFile(buf,&LP);
|
_____________________________ Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
|
|
|
|
|
|
|
Возраст: 34 C нами с 04.02.2006 Репутация: 40.2
|
|
Спасибо большое.
В этом и была ошибка (указатель LP ни на что не указывал и надо было использовать без LP)
|
_____________________________ НаправляЕмый собствЕнной тЕнью. вот так.
|
|
|
|
|
|
|
C нами с 24.07.2007 Репутация: 27
|
|
Что лучше всего установить(Linux, Visual Studio,..) под С/C++?
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
gamma писал(а): |
Что лучше всего установить(Linux, Visual Studio,..) под С/C++?
|
Выбор между Linux и Visual Studio — это сильно
Смотря какие цели преследуешь. Если для изучения языка и под Windows, попробуй DevCpp — свободная среда разработки, дистрибутив обычно включает в себя компилятор gcc.
P.S.: на всякий случай, Linux — это не среда разработки, а операционная система
|
|
|
|
|
|
|
|
Возраст: 40 C нами с 14.10.2004 Репутация: 51.8
|
|
chaser, в общем то вопрос правильный под виндой альтернативы MSVS нет, если конечно не заморачиваться на всяких правах, лицензиях и т.д. Но ведь тот же gcc при использовании требует открытия исходных кодов (если ситуация не изменилась).
|
_____________________________ cogito ergo sum
|
|
|
|
|
|
|
C нами с 24.07.2007 Репутация: 27
|
|
chaser, за DevCpp спасибо.
chaser писал(а): |
P.S.: на всякий случай, Linux — это не среда разработки, а операционная система
|
Хотя бы это я знаю
|
|
|
|
|
|
|
|