سؤال

لقد تم الترميز في ج for للسنوات القليلة الماضية.لكن هناك سؤال واحد لم أتمكن من اكتشافه.أريد أن أسأل, كلها مؤقتات في ج++, القيم?

إذا كان لا ، يمكن لأي شخص أن يقدم لي مثالا حيث مؤقتة المنتجة في التعليمات البرمجية هو لفالو?

هل كانت مفيدة؟

المحلول

رقم.

لا تجعل مواصفات لغة C ++ أبدًا مثل هذا التأكيد المباشر مثل تلك التي تسأل عنها. لا يقول في أي مكان في معيار اللغة أن "جميع الأشياء المؤقتة هي rvalues". علاوة على ذلك ، فإن السؤال نفسه هو القليل من التسمية ، لأن خاصية كونها rvalue في لغة C ++ ليست خاصية لكائن ، بل خاصية للتعبير (أي خاصية لنتيجته). هذا هو في الواقع كيف يتم تعريفه في مواصفات اللغة: بالنسبة لأنواع مختلفة من التعبيرات ، تقول عندما تكون النتيجة عبارة عن lvalue وعندما تكون rvalue. من بين أشياء أخرى ، هذا يعني في الواقع أنه يمكن الوصول إلى كائن مؤقت كـ RVALUE وكذلك LVALUE ، اعتمادًا على الشكل المحدد للتعبير الذي يتم استخدامه لأداء الوصول.

على سبيل المثال ، نتيجة الحرفي 2 + 3 من الواضح أن التعبير هو rvalue ، وهو نوع مؤقت int. لا يمكننا تطبيق أحادي & لها منذ أحادي & يتطلب lvalue مثل المعامل

&(2 + 3); // ERROR, lvalue required

ومع ذلك ، كما نعلم جميعًا ، يمكن إرفاق مرجع مستمر بكائن مؤقت ، كما في

const int &ri = 2 + 3;

في هذه الحالة ، يتم إرفاق الإشارة إلى المؤقتة ، ويمتد عمر الأخير. من الواضح ، بمجرد الانتهاء من ذلك ، يمكننا الوصول إلى ذلك المؤقت نفسه مثل Lvalue ri, ، لأن المراجع دائما lvalues. على سبيل المثال ، يمكننا تطبيق UNARY بسهولة وقوة & إلى المرجع والحصول على مؤشر إلى المؤقت

const int *pi = &ri;

مع بقاء هذا المؤشر صالحًا تمامًا طالما استمرت المؤشر.

مثال واضح آخر على الوصول إلى كائن مؤقت هو عندما نصل إلى كائن مؤقت من نوع الفئة من خلال this مؤشر. نتائج *this هو LVALUE (كما هو الحال دائمًا مع نتيجة أحادية * تم تطبيقه على مؤشر البيانات) ، ومع ذلك لا يغير حقيقة أن الكائن الفعلي قد يكون مؤقتًا بسهولة. لنوع فئة معين T, ، التعبير T() هو rvalue ، كما هو موضح صراحة في معيار اللغة ، ومع ذلك فإن الكائن المؤقت الذي تم الوصول إليه من خلال *T().get_this() التعبير (مع التنفيذ الواضح لـ T::get_this()) هو lvalue. على عكس المثال السابق ، تتيح لك هذه الطريقة الحصول على LVALUE غير المؤهل على الفور ، والذي يشير إلى كائن مؤقت.

لذا ، مرة أخرى ، يمكن بسهولة "النظر إلى الكائن المؤقت نفسه" على أنه rvalue أو باعتباره lvalue اعتمادًا على أي نوع من التعبير (أي نوع من مسار الوصول) يمكنك استخدام "النظر" إلى هذا الكائن.

نصائح أخرى

Prasoon Saurav قام بالفعل بربط موضوع CLC ++ جيد جدًا. هناك ، يشرح جيمس كانزي سبب عدم منطقي السؤال حقًا. يتلخص في:

  • rvalue -ness هي خاصية (منطقية) للتعبيرات - كل تعبير إما lvalue أو rvalue
  • المنشأون ليس التعبيرات

لهذا السبب ، فإن السؤال لا معنى له.

مثال جيد هو الكود التالي:

int main() {
  const int& ri = 4;
  std::cout << ri << std::endl; 
}

int المؤقت مع القيمة 4 ليس تعبيرا. التعبير ri هذا مطبوع ليس مؤقتًا. إنه lvalue ، ويشير إلى مؤقت.

حسنًا، يقوم عامل المصفوفة بإرجاع مرجع، فهل يمكن اعتبار أي دالة تُرجع مرجعًا أنها تفعل الشيء نفسه؟جميع المراجع ثابتة، في حين أنها يمكن أن تكون قيمًا، إلا أنها تعدل ما تشير إليه، وليس المرجع نفسه.وينطبق الشيء نفسه على *المشغل أو العامل،

*(a temp pointer) = val;

أقسم أنني كنت أستخدم بعض المترجمات التي من شأنها تمرير قيم مؤقتة إلى أي وظيفة تأخذ مرجعًا،

حتى تتمكن من الذهاب:

int Afunc()
{
   return 5;
}

int anotherFunc(int & b)
{
    b = 34;
}


anotherFunc(Afunc());

لا يمكن العثور على واحد يتيح لك القيام بذلك الآن، بالرغم من ذلك، يجب أن يكون المرجع ثابتًا للسماح بتمرير القيم المؤقتة.

int anotherFunc(const int & b);

على أي حال، يمكن أن تكون المراجع قيمًا ومؤقتة، والخدعة هي أن المرجع نفسه لا يتم تعديله، بل ما يشير إليه فقط.

إذا كنت تحسب-> عامل التشغيل كمشغل، فإن المؤشرات المؤقتة يمكن أن تكون قيمًا، ولكن ينطبق نفس الشرط، ليس المؤشر المؤقت هو الذي سيتم تغييره، ولكن الشيء الذي يشير إليه.

تعد عملية فهرسة الصفيف مؤقتة ومؤسسة ، شيء مثل [10] = 1 مثال على ما تبحث عنه ؛ LVALUE هو مؤشر مؤقت محسوب.

إجابة قصيرة:نعم ، لكنني لن أقتبس المعيار ، لأن إثبات هذه النقطة يتطلب معالجة كل نوع من أنواع مؤقتة هناك.بحكم التعريف مؤقت لديه عمر من بيان واحد ، لذلك تعيين الأشياء إلى واحد سيكون أسلوب الفقراء في أحسن الأحوال.

إجابة مثيرة للاهتمام:نسخة إليسيون يمكن أن تجعل (غالبا ما يجعل) كائن مؤقت متطابقة مع كائن لفالو.على سبيل المثال,

MyClass blah = MyClass( 3 ); // temporary likely to be optimized out

أو

return MyClass( 3 ); // likely to directly initialize object in caller's frame

تحرير: بالنسبة لمسألة ما إذا كان هناك أي كائن مؤقت في تلك الحالات ، يذكر 12.8 دولار/15

يمكن حذف عملية النسخ عن طريق إنشاء الكائن المؤقت مباشرة في هدف النسخة المحذوفة

مما يشير إلى وجود كائن مؤقت قد يكون مطابقا للقيمة.

يوفر

SharePoint Designer مجموعة من إجراءات سير العمل المتوفرة من خلال واجهة مستخدم Workflow Designer (UI). على الرغم من أن مجموعة إجراءات سير العمل التي يتم تضمينها في SharePoint Designer واسع النطاق، إلا أنها محدودة مع ذلك. في بعض الحالات، قد تحتاج إلى نموذج عملية تجارية لا يتم استيفاء متطلباتها من خلال مكتبة العمل الحالية لإجراءات سير العمل المتوفرة في SharePoint Designer.

يمكنك إلقاء نظرة على الروابط أدناه،

p>

href="http://msdn.microsoft.com/en-us/library/hh872790٪28V=OFFICE.14٪29.aspx#odc_sp14_ta_bestpractcrtgcstmactinsp2010_bestpractices" rel="nofollow noreferrer"> أفضل الممارسات لإنشاء مخصص الأنشطة في SharePoint 2010

p> أنشطة سير العمل المخصصة مفيدة SharePoint. -> في هذا يمكنك الاستفادة من "إرسال البريد الإلكتروني مع نشاط مرفق ملف HTTP "-> يسمح هذا النشاط بإرسال رسائل البريد الإلكتروني باستخدام المرفقات المستردة باستخدام طلب ويب. تنفيذ تقرير خدمات التقارير وإرساله كمرفق من داخل سير العمل SPD سيكون مثالا من هذا القبيل. طلب URL قابل للتخصيص بالكامل ويمكن أن يشمل متغيرات سير العمل. يتم دعم كل من طلبات HTTP و HTTPS. وبعد

SharePoint 2010: إنشاء نشاط سير عمل باستخدام Visual Studio 2010

href="http://spdactivities2010.codeplex.com/" rel="nof"nofollow noreferrer"> أنشطة مصمم SharePoint مخصص ل SharePoint 2010.

href="https://sharepoint.stackexchange.com/questions/17107/how-do-i-create-a-custom-action-a-a-workflow"> كيف يمكنني إنشاء إجراء مخصص لسير العمل؟

إذا كان لا ، هل يمكن لأي شخص أن يقدم لي مثالاً حيث تم إنتاج مؤقت في الكود؟

الرمز التالي يربط مرجعًا ثابتًا بكائن مؤقت من النوع const float تم إنشاؤه بواسطة المترجم:

int i;
const float &cfr = i;

السلوك هو "كما لو":

int i;
const float __tmp_cfr = i; // introduced by the compiler
const float &cfr = __tmp_cfr;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top