تشخیص اشتباه r value - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تشخیص اشتباه r value

+2 امتیاز

سلام.

من کد زیر را نوشتم gcc و clang درست r value بودن را تشخیص میدن ولی vs2013 اینو l value تشخیص میده اشکال از کجاست؟

#include <iostream>
using namespace std;
void test(int& x)
{
	cout << "l value" << endl;
	x++;
	
}
void test(int&& x)
{
	cout << "r value" << endl;
	return test(x);
}

int main()
{
		int a= 0;
		test(int(a)); 

		std::cout <<  a; 
	return 0;
}

 

سوال شده مهر 29, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110
این سوال باعث شد که مایکروسافت این صفحه رو ایجاد کنه:
http://msdn.microsoft.com/en-us/library/dn449507.aspx

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

اشکال از کامپایلر مایکروسافت هست که در حالت عادی استاندارد نیست اما با آپشن ‎\Za‎ درست می‌شه.  ‎(int)a در واقع یک prvalue هست:

c++, l value, r value, vs2013, gcc, clang

این آدرس برنامه در کامپیالر مایکروسافت در حالی که آپشن ‎\Za فعال است:

http://rextester.com/OAI45748

 

در ضمن یکی دو ساعت پیش  این به عنوان یه باگ گزارش شد:

https://connect.microsoft.com/VisualStudio/feedback/details/1008261

 

پاسخ داده شده مهر 30, 1393 بوسیله ی irancplusplus (امتیاز 203)   1 2 14
ویرایش شده دی 30, 1393 بوسیله ی haniye sarbazi
...