CPU: Core2 Duo
Оперативная память: 4 GB
OS: Windows 7 64-бит
IDE: Код :: Blocks 16,0
Компилятор:TDM-GCC MinGW
IT Уровень : Newb пытается научиться C++
.Почему иногда std :: cout не хватает и требуется использовать пространство имен std?
Я использовал следующий код для тестирования компилятора:
#include <iostream>
#include <string>
using namespace std;
auto add([](auto a, auto b){ return a+b ;});
auto main() -> int {cout << add("We have C","++14!"s);}
без ошибок. Консольный вывод «We have C++14!» подтвердил, что компилятор соответствует стандарту ISO/IEC 14882: 2014 языка программирования C++, а также C++ 14.
Затем я попытался «оптимизировать» код, комментируя using namespace std;
и заменяя cout
на std::cout
. Теперь код выглядит следующим образом:
#include <iostream>
#include <string>
//using namespace std;
auto add([](auto a, auto b){ return a+b ;});
auto main() -> int {std::cout << add("We have C","++14!"s);}
Строительные Сообщения:
||=== Build: Release in c++14-64 (compiler: GNU GCC Compiler) ===|
C:\CBProjects\c++14-64\c++14-64-test.cpp||In function 'int main()':|
C:\CBProjects\c++14-64\c++14-64-test.cpp|5|error: unable to find string literal operator 'operator""s' with 'const char [6]', 'long long unsigned int' arguments|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Вопросы:
- Что вызывает ошибку во второй программе?
- Как можно избежать страшного
using namespace std
?
EDIT Тот факт, что я решил задать этот вопрос здесь означает, что, несмотря на мои искренние усилия, я не смог решить эту проблему. Цель вопроса - найти ответ. Да, я понимаю - теперь, когда на вопрос был дан ответ - что решение ускользнуло от меня, потому что я понятия не имел, что такое «оператор строковых литералов», а компилятор GNU GCC не имеет наиболее удобных для начинающих сообщений об ошибках. Как я уже говорил в «заголовке» этого вопроса, я новичок. Я нахожусь в самом начале C++. Я только что установил Code :: Blocks и компилятор TDM-GCC MinGW, потому что мне нужен C++ 14 и возможность создавать 32-битные и 64-разрядные исполняемые файлы. Тот факт, что этот вопрос получил такой исчерпывающий ответ, означает, что сам вопрос заслуживает внимания, и некоторые люди считают, что вопрос и ответ могут быть полезны для других людей в будущем. Я новичок на этом сайте, и каждый downvote затрудняет мне поддержку ответа. Моя репутация снизилась на 20%, потому что кто-то занижал этот вопрос после того, как было дан ответ.
Если вы должны понизить, можете ли вы хотя бы указать на проблему? Благодаря!
Это 's' суффикс на строковый литерал, а не' cout'. 'using std :: operator" "s' – Ryan
@Ryan' using namespace std :: string_literals; 'более традиционный подход. –