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

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

7
Обязательны ли закорачивающие логические операторы? А порядок оценки?
Есть ли стандарт ANSI мандат логических операторов закоротить, в С или C ++? Я смущен, потому что я помню книгу K&R, в которой говорилось, что ваш код не должен зависеть от короткого замыкания этих операций, поскольку они могут и не быть. Может ли кто-нибудь указать, где в стандарте сказано, что …

2
Значение флага -pthread при компиляции
В различных многопоточных проектах C и C ++ я видел, как этот -pthreadфлаг применялся как на этапе компиляции, так и на этапе компоновки, в то время как другие не использовали его вообще и просто переходили -lpthreadна этап компоновки. Есть ли опасность не компилировать и не связываться с -pthreadфлагом - т.е. …
143 c++  c  linux  pthreads 

6
_DEBUG против NDEBUG
Какое определение препроцессора следует использовать для указания отладочных разделов кода? Используйте #ifdef _DEBUGили #ifndef NDEBUGили есть лучший способ сделать это, например #define MY_DEBUG? Я думаю, что _DEBUGVisual Studio специфичен, стандарт NDEBUG?
142 c++  c  debugging 

6
Почему неравенство проверяется как (! (A == b)) во многих кодах стандартной библиотеки C ++?
Это код из стандартного removeкода библиотеки C ++ . Почему неравенство проверяется if (!(*first == val))вместо if (*first != val)? template <class ForwardIterator, class T> ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val) { ForwardIterator result = first; while (first!=last) { if (!(*first == val)) { *result = *first; …
142 c++ 

4
Является ли передача по значению разумным значением по умолчанию в C ++ 11?
В традиционном C ++ передача по значению в функции и методы является медленной для больших объектов и обычно не одобряется. Вместо этого программисты на C ++ стремятся передавать ссылки, что быстрее, но при этом возникает множество сложных вопросов, касающихся владения и особенно управления памятью (в случае, если объект выделен в …
142 c++  coding-style  c++11 

6
Какого типа лямбда-выражения выводятся с помощью «auto» в C ++ 11?
У меня было ощущение, что тип лямбда - это указатель на функцию. Когда я выполнил следующий тест, я обнаружил, что это неправильно ( демо ). #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; …
142 c++  lambda  c++11  typeof  auto 


4
Как создать общую библиотеку с помощью cmake?
Я написал библиотеку, которую использовал для компиляции, используя самописный Makefile, но теперь я хочу перейти на cmake. Дерево выглядит следующим образом (я удалил все ненужные файлы): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp …

2
Является ли #pragma когда-то частью стандарта C ++ 11?
Традиционно стандартным и переносимым способом избежать включения нескольких заголовков в C ++ было использование #ifndef - #define - #endifсхемы директив предварительного компилятора, также называемой схемой защиты от макросов (см. Фрагмент кода ниже). #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif Однако в большинстве реализаций / компиляторов (см. Рисунок ниже) существует более «элегантная» …

5
путаница преобразования stringstream, string и char *
Мой вопрос можно свести к следующему: где строка, возвращенная из stringstream.str().c_str()памяти, находится в памяти и почему ее нельзя присвоить a const char*? Этот пример кода объяснит это лучше, чем я могу #include <string> #include <sstream> #include <iostream> using namespace std; int main() { stringstream ss("this is a string\n"); string str(ss.str()); …


3
Должен ли я передать std :: function по const-reference?
Допустим, у меня есть функция, которая принимает std::function: void callFunction(std::function<void()> x) { x(); } Должен ли я пройти xпо const-reference вместо этого ?: void callFunction(const std::function<void()>& x) { x(); } Меняется ли ответ на этот вопрос в зависимости от того, что функция делает с ним? Например, если это функция-член класса …
141 c++  function  reference 

9
Лучшая документация для Boost: asio?
Документация, доступная на веб-сайте boost, ... ограничена. Судя по тому, что я смог прочитать, общее мнение сводится к тому, что найти хорошую документацию по библиотеке boost :: asio просто сложно. Так ли это на самом деле? Если да, то почему? Примечания: Я уже нашел (не повышающий) веб-сайт Asio - и …
141 c++  boost  boost-asio 

6
Создание собственных итераторов
Я пытаюсь изучить C ++, так что простите меня, если этот вопрос демонстрирует отсутствие базовых знаний, понимаете, факт в том, что мне не хватает базовых знаний. Мне нужна помощь в разработке итератора для созданного мной класса. У меня есть класс «Форма», в котором есть контейнер точек. У меня есть класс …
141 c++  iterator 

16
Статические виртуальные члены с ++?
Возможно ли в C ++ иметь функцию-член одновременно staticи virtual? По-видимому, нет простого способа сделать это ( static virtual member();это ошибка компиляции), но есть ли хотя бы способ добиться того же эффекта? IE: struct Object { struct TypeInformation; static virtual const TypeInformation &GetTypeInformation() const; }; struct SomeObject : public Object …
141 c++  static  virtual 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.