الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أوجد نتيجة العمليه الحسابيه

بدأه C++er في 5 يوليو 2011 · 4 رد · 594 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أحيانا عندما اشعر بالملل اقوم بكتابة بعض الأكواد الغريبه و احاول إيجاد نتيجتها، إليكم إحداها:

فلنفترض وجود الفئه int64:

struct int64
{
	int64(int v) : value(v) {}
	int64(long long v) : value(v) {}
	int64(const int64& v) : value(v.value) {}

	int64& operator+() { return *this; }

	int64& operator-() { return -value, *this; }

	int64& operator++()	{ return value++, *this; }

	int64 int64::operator++(int)
	{
		value++;
		return int64(value - 1);
	}

	int64& operator--()	{ return value--, *this; }

	int64 operator--(int)
	{
		value--;
		return int64(value + 1);
	}

public:
	long long value;

public:
	friend int64 operator+(const int64& lhs, const int64& rhs)
	{ return int64(lhs.value + rhs.value); }

	friend int64 operator-(const int64& lhs, const int64& rhs)
	{ return int64(lhs.value - rhs.value); }
};

بالكود القادم أوجد التالي:

1- قيمة المتغير result

2- عدد المتغيرات المؤقته التى سيقوم المترجم بإنشائها(مع شرح خطوات انشائهم).

int64 value = 100;
int64 result = ++--++value++-++--+--++-++value++--++;

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 5 يوليو 2011 في 23:36

مدونتي: C++ Tips and Tricks

#2

أخ محمد, أليس تعديل متغير أكثر من مرة دون وجود sequence points تفصل بين عمليات التعديل عملية غير معرفة undefined؟

#3

أهلا أخ خالد،

إذا تم تطبيق الكود فى المثال بالأعلي على الأنواع الأساسيه فالمترجم سيعترض على اكثر من جزء، و حيث ان هذا الكود يطبق على user defined types و الذى يحتوي على المعاملات المستخدمه فلا توجد مشكله. وثائق اللغه ناقشت مثل هذا الأمر فى 2.4.5:

[Example: The program fragment x+++++y is parsed as x ++ ++ + y, which, if x and y are of built-in

types, violates a constraint on increment operators, even though the parse x ++ + ++ y might yield a

correct expression. ]

أيضا احد الأسباب التى ستجعل هذا الكود يعمل انه سيتم التعامل مع المعاملات على انها دوال و يتم استدعاء ذات الأولويه الأعليه ثم الذى يليه و هكذا.

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 6 يوليو 2011 في 19:10

1

مدونتي: C++ Tips and Tricks

#4

كلامك صحيح أخ محمد, المعاملات التي تم إعادة تعريفها عبارة عن دوال بالتالي ليست هناك undefined behavior :S

سأحاول حل المسألة بإذن الله, مسألة جميلة أخي كالعادة.

تحياتي...

1
#5
اقتباس
أليس تعديل متغير أكثر من مرة دون وجود sequence points تفصل بين عمليات التعديل عملية غير معرفة undefined؟

نعم كلامك صحيح. معلش احيانا انسى

اقتباس
المعاملات التي تم إعادة تعريفها عبارة عن دوال بالتالي ليست هناك undefined behavior :S

:blush:

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 8 يوليو 2011 في 05:22

مدونتي: C++ Tips and Tricks

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…