やりそうなエラー
stringリテラルの設定もれ
string型のリテラルはincludeとnamespace設定がいる
#include <string>
using namespace std::string_literals;
int main(){
std::cout << "hoge\n"s;
}
忘れた場合のエラーメッセージは
vscode
ユーザー定義のリテラル演算子が見つかりませんC/C++(2486)
gcc
chap3.cpp:4:18: error: unable to find string literal operator ‘operator""s’ with ‘const char [6]’, ‘long unsigned int’ arguments
4 | std::cout << "hoge\n"s;
| ^~~~~~~~~
make: *** [Makefile:6: chap3.o] Error 1
補足
C++11でリテラル演算子をユーザー定義できるようになったとのこと。自分で定義するなら
//using namespace std::string_literals;
std::string operator""s(const char* str, size_t len) {
return std::string(str, len);
}
ただし、自作する場合はアンスコ(_)で始めろと。
warning: literal operator suffixes not preceded by ‘_’ are reserved for future standardization [-Wliteral-suffix]
試しに自作したら
#include <iostream>
#include <string>
//using namespace std::string_literals;
std::string operator""s(const char* str, size_t len) {
return std::string(str, len);
}
std::string operator""_sjisaku(const char* str, size_t len) {
return std::string(str, len);
}
int main(){
std::cout << "hoge\n"s;
std::cout << "hogejisaku\n"_sjisaku;
}
上でも動いた