PDA

View Full Version : مبتدی: فواید استفاده از User-defined Literals



ehsan_faal
یک شنبه 21 تیر 1394, 10:14 صبح
سلام .
این ویژگی ای که به C++11 اضافه شده دقیقا فایدش چیه؟
منظورم اینه که کجا احساس نیاز کردن که همچین چیزی رو ابداع کردن؟ مثلا من دنبال مثال میگشتم در مورد این ویژگی به این کد رسیدم ولی خب راستش درک نمیکنم هدف از این کد چیه؟
ممنون میشم دوستانی که با این ویژگی آشنا هستن یه مقدار توضیح بدن.

#include <iostream>>
#include <vector>
#include <cmath>
#include <stdlib.h>
using namespace std;

vector <int > operator "" _vect(unsigned long long num)
{
vector <int > v;
while(num>0)
{
v.push_back(num%10);
num /=10;
}
return v ;
}
int operator "" _pow (const char *str,size_t n)
{
return pow(atoi(str),2);
}

string operator "" _cpp(const char ch)
{
return "C++‎‎‎11 is fun:D";
}

int main()
{
vector <int > vect=12345678_vect;

for(auto i:vect)
cout<<i<<endl;

cout<<"12"_pow<<endl;
cout<<'m'_cpp<<endl;
}

حامد مصافی
یک شنبه 21 تیر 1394, 10:28 صبح
رشته‌ها در مواقع مختلف معانی مختلفی دارند. هر رشته الزاماً به معنی یک نوشته نیست.
کامپایلر‌ها هم چنین احساس نیازی پیدا کردند و پسوند‌هایی برای رشته‌های یونیکد ایجاد کردند. حالا ممکن است به همچین چیزی نیاز داشته باشیم. برای مثال من‌ میخواهم وقتی یک رشته تعریف شد اعداد انگلیسی تبدیل به فارسی شوند. می‌توانم یک لیترال پسوند تعریف کنم (مانند مثال فوق) که این عمل را برای من انجام دهد.

ehsan_faal
یک شنبه 21 تیر 1394, 21:16 عصر
امکانش هست یه مثال بزنید که از راههای عادی انجام دادنش سخت باشه یا مثلا تنها راه حلش استفاده از این ویژگی باشه؟
توی کد قبلی همه ی اون کارها رو قبلا بدون این ویژگی هم میشد انجام داد.

حامد مصافی
دوشنبه 22 تیر 1394, 10:21 صبح
هیچ مثالی وجود نداره که بدون استفاده از امکانات جدید نشه انجام داد. در سال ۲۰۰۳ مردم با C++ برنامه می‌نوشتند کار ناشدنی هم وجود نداشت. بعد از سال ۲۰۱۱ یا ۲۰۱۴ که استانداردهای جدید برای به‌روز تر کردن این زبان معرفی شدند. اما همچنان امکانات قبلی هم موجود هستند. یا به عبارتی دیگه اگر شما کل امکانات جدید رو در نظر نگیرید باز هم برنامه‌نویسی سخت نیست.
برای این امکان فقط می‌تونم مثال‌هایی ذکر کنم که بود و نبودش فرق زیادی در پیاده‌سازی نداره فقط کمی حس به‌روزتر بودن به برنامه میده (همون مثالی که در پست قبلی ذکر کردم)