是否可以在C++中定义表达式中的变量?

Jak*_*old 1 c++ expression inline

我有这个疯狂的家庭作业,我必须创建一个表达来验证朱利安和格里高利历和许多其他事情的日期......

问题是它必须全部在一个表达式中,所以我不能使用任何表达式 ;

有没有在表达式中定义变量的选项?就像是

d < 31 && (bool leapyear = y % 4 == 0) || (leapyear ? d % 2 : 3) ....
Run Code Online (Sandbox Code Playgroud)

我可以在哪里定义和初始化一个或多个变量并在一个表达式中使用它们而不使用任何变量;

编辑:明确地说,它必须是一行表达式.没有功能..

我现在正在做的就是编写宏并扩展它们,所以我最终得到了这样的东西

#define isJulian(d, m, y) (y < 1751 || (y == 1752 && (m < 9) || (m == 9 && d <= 2)))
#define isJulianLoopYear(y) (y % 4 == 0)
#define isGregorian(d, m, y) (y > 1573 || (y == 1752 && (m > 9) || (m == 9 && d > 13)))
#define isGregorianLoopYear(y) ((y % 4 == 0) || (y % 400 = 0))
// etc etc ....
Run Code Online (Sandbox Code Playgroud)

看起来这是解决问题的唯一合适方式

编辑:这是原始问题

假设我们有变量d my包含日,月和年.任务是写一个单独的表达式,决定日期是否有效.如果date有效,则值应为true(非零值);如果date无效,则值为false(零).

这是表达式的一个例子(正确的表达式看起来像这样):

d + 4 == y ^ 85 ? ~m : d * (y-2)
Run Code Online (Sandbox Code Playgroud)

这些是错误答案的例子(不是表达式):

if ( log ( d ) == 1752 ) m = 1;
Run Code Online (Sandbox Code Playgroud)

要么:

for ( i = 0; i < 32; i ++ ) m = m / 2;
Run Code Online (Sandbox Code Playgroud)

仅提交仅包含一个表达式的文件,而;不是最后一个.不要提交命令或整个程序.

  • 直到2.9.1752是朱利安历法,在那个日期之后是格里高利历
  • 在儒略历中,每年都有4个闰年可分割.
  • 在公历中,闰年是一年,可分为4,但不可分为100年.可分为400年的年份是另一个例外,是闰年.
  • 1800,1801,1802,1803,1805,1806,......,1899,1900,1901,......,2100,......,2200不是循环年.
  • 1896,1904,1908,......,1996,2000,2004,......,2396,...,2396,2400是循环年
  • 1752年9月是另一个例外,当2.9.1752之后是14.9.1752时,因此日期3.9.1752,4.9.1752,...,13.9.1752无效.

pol*_*mmy 6

((m >0)&&(m<13)&&(d>0)&&(d<32)&&(y!=0)&&(((d==31)&&
((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12)))
||((d<31)&&((m!=2)||(d<29)))||((d==29)&&(m==2)&&((y<=1752)?((y%4)==0):
((((y%4)==0)&&((y%100)!=0))
||((y%400)==0)))))&&(((y==1752)&&(m==9))?((d<3)||(d>13)):true))
Run Code Online (Sandbox Code Playgroud)


MSa*_*ers 5

<evil> 如果可以重用现有的,为什么要定义新的?errno是一个完美的临时变量. </evil>