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

标签 c++ inline expression

我有一个疯狂的家庭作业,我必须创建一个表达式来验证关于儒略历和公历以及许多其他东西的日期......

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

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

d < 31 && (bool leapyear = y % 4 == 0) || (leapyear ? d % 2 : 3) ....

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

编辑:明确指出,它必须是单行表达式。没有功能..

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

#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 ....

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

编辑:这是原始问题

假设我们有包含日、月和年的变量d my。任务是编写一个表达式来决定日期是否有效。如果日期有效,则值应为真(非零值);如果日期无效,则值应为假(零)。

这是一个表达式示例(正确的表达式应该是这样的):

d + 4 == y ^ 85 ? ~m : d * (y-2)

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

if ( log ( d ) == 1752 ) m = 1;

或:

for ( i = 0; i < 32; i ++ ) m = m / 2;

仅提交仅包含一个表达式且末尾没有 ; 的文件。不要提交命令或整个程序。

  • 1752 年 9 月 2 日之前为儒略历,之后为公历
  • 在儒略历中,每一年都可以被 4 整除为闰年。
  • 公历每年都是闰年,可以被 4 整除,但不能被 100 整除。可以被 400 整除的年份是另一个异常(exception),是闰年。
  • 1800、1801、1802、1803、1805、1806、....、1899、1900、1901、...、2100、...、2200 不是循环年。
  • 1896, 1904, 1908, ..., 1996, 2000, 2004, ..., 2396, ..., 2396, 2400 是循环年
  • 1752 年 9 月是另一个异常(exception),当时 2.9.1752 之后是 14.9.1752,因此日期 3.9.1752、4.9.1752、...、13.9.1752 无效。

最佳答案

((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))

关于c++ - 是否可以在 C++ 中的表达式中定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512174/

相关文章:

html - Twitter-Bootstrap - 将简单元素内联

java - java slick 表达式的非法开始

c++ - 如何在 visual studio 代码中创建目标 'makefile'?

c++ - 更新链表时遇到问题

c++ - GCC 是否有办法指定是否在调用站点内联?

c++ - 内联公共(public)接口(interface)的方法

c# - 如何使用 Expression.Assign 选择器与对象的目标类型一般分配属性?

C++11 多线程 : Valgrind uninitialized value(s) warning

c++ - 将字符串流传递给函数