Вопросы с тегом «c++»

165
Почему я должен объявлять виртуальный деструктор для абстрактного класса в C ++?

Я знаю, что это хорошая практика - объявлять виртуальные деструкторы для базовых классов в C ++, но всегда ли важно объявлять virtualдеструкторы даже для абстрактных классов, которые функционируют как интерфейсы? Пожалуйста, предоставьте некоторые причины и примеры,...

165
Есть ли замена для unistd.h для Windows (Visual C)?

Я портирую относительно простую консольную программу, написанную для Unix, на платформу Windows ( Visual C ++ 8.0 ). Все исходные файлы включают в себя "unistd.h", который не существует. Удаляя его, я получаю жалобы на отсутствие прототипов для 'srandom', 'random' и 'getopt'. Я знаю, что могу...

165
Вызывает ли удаление указатель на подкласс деструктор базового класса?

У меня есть, class Aкоторый использует выделение кучи памяти для одного из своих полей. Класс A создается и сохраняется как поле указателя в другом классе ( class B. Когда я закончу с объектом класса B, я вызываю delete, который, я полагаю, вызывает деструктор ... Но вызывает ли это и деструктор...

165
Как отладить ошибки повреждения кучи?

Я отлаживаю (нативное) многопоточное приложение C ++ в Visual Studio 2008. В случайных, на первый взгляд случаях я получаю сообщение об ошибке «Windows запустила точку останова ...» с замечанием, что это может быть связано с повреждением куча. Эти ошибки не всегда сразу приводят к сбою приложения,...

165
Почему volatile не считается полезным в многопоточном программировании на C или C ++?

Как показано в этом ответе, который я недавно опубликовал, мне кажется, что я не совсем понимаю полезность (или ее отсутствие) volatileмногопоточного программирования. Насколько я понимаю, в любой момент, когда переменная может быть изменена вне потока контроля фрагмента кода, обращающегося к ней,...

165
Что такое цель C ++? [закрыто]

Трудно сказать, что здесь спрашивают. Этот вопрос является двусмысленным, расплывчатым, неполным, чрезмерно широким или риторическим, и на него нельзя дать разумный ответ в его нынешней форме. Чтобы получить разъяснения по этому вопросу, чтобы его можно было снова открыть, посетите справочный...

165
Ошибка статических функций-членов; Как правильно написать подпись?

Я получаю сообщение об ошибке при попытке скомпилировать мой код в g ++ с использованием текущей подписи: cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage Мой вопрос двоякий: Почему он не компилируется таким образом? Какая правильная...

165
Действительно ли идиома pImpl используется на практике?

Я читаю книгу «Исключительный C ++» Херба Саттера, и в этой книге я узнал об идиоме pImpl. По сути, идея состоит в том, чтобы создать структуру для privateобъектов classи динамически распределить их, чтобы уменьшить время компиляции (а также лучше скрыть частные реализации). Например: class X {...

165
Что точно исключает #defining WIN32_LEAN_AND_MEAN?

Я нашел объяснение, определяющее, что WIN32_LEAN_AND_MEAN «уменьшает размер заголовочных файлов Win32, исключая некоторые из менее часто используемых API». Где-то еще я читал, что это ускоряет процесс сборки. Итак, что именно исключает WIN32_LEAN_AND_MEAN? Должен ли я заботиться об этой директиве...

165
Почему я должен избегать std :: enable_if в сигнатурах функций

Скотт Мейерс опубликовал содержание и статус своей следующей книги EC ++ 11. Он написал, что один пункт в книге может быть «Избегайте std::enable_ifподписей функций» . std::enable_if может использоваться в качестве аргумента функции, в качестве возвращаемого типа или в качестве шаблона класса или...

164
Почему я не могу объявить класс в пространстве имен, используя двойные двоеточия?

class Namespace::Class; Зачем мне это делать? namespace Namespace { class Class; } Используя VC ++ 8.0, компилятор выдает: ошибка C2653: «Пространство имен»: это не имя класса или пространства имен Я предполагаю, что проблема здесь в том, что компилятор не может определить, Namespaceявляется ли...

164
«For (;;)» быстрее, чем «while (TRUE)»? Если нет, то почему люди используют это?

for (;;) { //Something to be done repeatedly } Я видел, как подобные вещи часто используются, но я думаю, что это довольно странно ... Разве не было бы намного яснее сказать while(true)или что-то в этом роде? Я предполагаю, что (как причина, по которой многие программисты прибегают к загадочному...

164
Могут ли виртуальные функции иметь параметры по умолчанию?

Если я объявляю базовый класс (или интерфейсный класс) и указываю значение по умолчанию для одного или нескольких его параметров, должны ли производные классы указывать те же значения по умолчанию, а если нет, то какие значения по умолчанию будут проявляться в производных классах? Приложение: меня...

164
Как исправить файл .pch, отсутствующий при сборке?

Когда я собираю свое решение c ++ в Visual Studio, он жалуется на отсутствие файла xxxxx.pch. Есть ли параметр, который мне не хватает, чтобы вернуть предварительно скомпилированные заголовки? Вот точная ошибка для полноты: Error 1 fatal error C1083: Cannot open precompiled header file:...

164
Никогда раньше не видел C ++ для цикла

Я конвертировал алгоритм C ++ в C #. Я наткнулся на это для цикла: for (u = b.size(), v = b.back(); u--; v = p[v]) b[u] = v; Это не дает ошибки в C ++, но в C # (не может преобразовать int в bool). Я действительно не могу понять это для цикла, где условие? Может кто-нибудь объяснить, пожалуйста?...

163
Является ли D надежной альтернативой Java и C ++? [закрыто]

В настоящее время этот вопрос не очень подходит для нашего формата вопросов и ответов. Мы ожидаем, что ответы будут подтверждены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, споры, опрос или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и,...

163
Автоматически добавлять все файлы в папке к цели с помощью CMake?

Я рассматриваю возможность переключения кроссплатформенного проекта с отдельных систем управления сборками в Visual C ++, XCode и make-файлах на CMake. Одна важная функция, которая мне нужна, - это автоматическое добавление всех файлов в каталоге к цели. Хотя это легко сделать с помощью make, это...