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

945
Почему переменные не могут быть объявлены в операторе switch?

Я всегда задавался вопросом: почему вы не можете объявлять переменные после метки регистра в операторе switch? В C ++ вы можете объявлять переменные практически везде (и объявление их близко к первому использованию, очевидно, хорошо), но следующее по-прежнему не будет работать: switch (val) { case...

931
Каковы правила использования подчеркивания в идентификаторе C ++?

В C ++ принято называть переменные-члены с каким-то префиксом, обозначающим тот факт, что они являются переменными-членами, а не локальными переменными или параметрами. Если вы пришли из MFC, вы, вероятно, будете использовать m_foo. Я тоже видел myFooиногда. C # (или, возможно, просто .NET),...

905
В чем разница между typedef и using в C ++ 11?

Я знаю, что в C ++ 11 теперь мы можем использовать usingдля записи псевдоним типа, например, typedefs: typedef int MyInt; Насколько я понимаю, эквивалентно: using MyInt = int; И этот новый синтаксис возник в результате попытки выразить " template typedef": template< class T > using MyType =...

873
Почему программисты на C ++ должны минимизировать использование «нового»?

Я наткнулся на вопрос переполнения стека Утечка памяти с помощью std :: string при использовании std :: list <std :: string> , и один из комментариев говорит об этом: Прекратите использовать newтак много. Я не вижу причин, по которым ты использовал новое, где бы ты ни был. Вы можете создавать...

833
Код C ++ для проверки гипотезы Коллатца быстрее, чем рукописная сборка - почему?

Я написал эти два решения для Project Euler Q14 , в сборке и на C ++. Это один и тот же метод грубой силы для проверки гипотезы Коллатца . Решение для сборки было собрано с nasm -felf64 p14.asm && gcc p14.o -o p14 C ++ был скомпилирован с g++ p14.cpp -o p14 Ассамблея, p14.asm section .data...

812
Какой лучший способ обрезать std :: string?

В настоящее время я использую следующий код, чтобы урезать все std::stringsмои программы вправо : std::string s; s.erase(s.find_last_not_of(" \n\r\t")+1); Это работает нормально, но мне интересно, есть ли какие-то конечные случаи, когда он может потерпеть неудачу? Конечно, приветствуются ответы с...

801
Что означает T && (двойной амперсанд) в C ++ 11?

Я изучил некоторые из новых функций C ++ 11, и одна из них я заметил, это двойной амперсанд при объявлении переменных, например T&& var. Для начала, как зовут этого зверя? Я бы хотел, чтобы Google позволил нам искать такие знаки препинания, как этот. Что именно это значит? На первый взгляд,...

788
Зачем использовать явно бессмысленные операторы do-while и if-else в макросах?

Во многих макросах C / C ++ я вижу код макроса, заключенный в нечто вроде бессмысленного do whileцикла. Вот примеры. #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else Я не вижу, что do whileделает. Почему бы просто не написать это без этого? #define FOO(X) f(X);...

777
Как преобразовать std :: string в нижний регистр?

Я хочу преобразовать std::stringв нижний регистр. Я знаю о функции tolower(), однако в прошлом у меня были проблемы с этой функцией, и в любом случае она вряд ли идеальна, так как использование с std::stringтребовало бы итерации по каждому символу. Есть ли альтернатива, которая работает 100%...

763
push_back против emplace_back

Я немного сбит с толку относительно разницы между push_backи emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); Поскольку существует push_backперегрузка, принимающая ссылку на rvalue, я не совсем понимаю, для чего это...

755
Почему моя программа работает медленно, когда зацикливается ровно на 8192 элемента?

Вот выдержка из рассматриваемой программы. Матрица img[][]имеет размер SIZE × SIZE и инициализируется в: img[j][i] = 2 * j + i Затем вы создаете матрицу res[][], и каждое поле здесь считается средним из 9 полей вокруг нее в матрице img. Граница оставлена ​​на 0 для простоты....

742
std :: wstring VS std :: string

Я не могу понять разницу между std::stringи std::wstring. Я знаю, wstringподдерживает широкие символы, такие как символы Юникода. У меня есть следующие вопросы: Когда я должен использовать std::wstringболее std::string? Может ли std::stringсодержать весь набор символов ASCII, включая специальные...