سلام
literal در واقع همان ثابتهای عددی و رشته ای و .. هستند که چند دسته هستند
literal های صحیح مثل 2 یا 5 یا 6LL یا 0x45
در مورد 45 پیشوند 0x آورده شد که نشان بده در مبنی 16 هست
یا مثلا 6 با پسوند LL آورده شده که مشخص می کنه از نوع long long هست
literal های کاراکتری مثل 'a' یا 'u'b یا ...
که مورد اول از نوع char و پیشوند u در دومی مشخص می کنه ازنوع char16_t هست
literal های اعشاری مثل 12.3 یا 15.6f
که اولی double و دومی float هست
literal های رشته ای مثل "abc" یا "u"def
که مثلا اولی آرایه ثابت از char و دومی آرایه ثابت از char16_t هستند
literal های بولی مثل true یا false
literal اشاره گر که عبارت است از کلمه کلیدی nullptr
و نهایتا literal های تعریف شده توسط کاربر که فکر کنم سوال اصلی هم در این مورد باشه
ما می تونید پسوند هایی به دلخواه تعریف کنیم که وقتی اون را بعد از یک literal گذاشتیم برای ما مثل یک تابع یا عملگر رفتار کنه
روش تعریف هم به این صورته که مثل تعریف سایر عملگرها انجام میشه اما با این تفاوت :
operator "" identifier
که identifier همون پسوند مورد نظره که حرف اول اون با _ شروع می شه
چند تا مثال از این منبع :
http://en.cppreference.com/w/cpp/language/user_literal
مثلا ما می خواهیم یک پسوند تعریف کنیم که بعد از عر عددگذاشتیم درجه را به رادیان تبدیل کنه ( این کار را با تابع هم می تونستیم انجام بدیم)
long double operator"" _deg ( long double deg )
{
return deg*3.141592/180;
}
int main(){
double x = 90.0_deg;
}
یا مثلا می خواهیم یک پسوند تعریف کنیم که چاپ کنه
#include <iostream>
void operator"" _print ( const char* str )
{
std::cout << str;
}
int main(){
54321_print;
}
با استفاده از template هم میشه literal تعریف کنیم
یه سری ریزه کاری ها هم در استفاده ازش هست که توی همون منبع یا استاندارد نوشته شده