说,我有
int a,b,c,d;double x;
我想写
x=a/b/c/d+c/d+a;
通过将转换放在解析的运算符树叶中,无需将表达式转化为混乱
x=(double)a/b/c/d+(double)c/d+a;
是否可以使用C风格的宏(递归或不递归)?应该用新的类和重载 *** 作符完成吗?
解决方法x=a/b/c/d+c/d+a;
这是一个非常复杂的表达.更好地给它一个名字:
double complex_Expression(double a,double b,double c,double d) { return a/b/c/d+c/d+a;}
现在当您使用整数参数调用它时,由于参数的类型为double,因此使用常规的算术转换将参数转换为double
int a,d;// Init them somehowdouble x = complex_Expression(a,d);
用C 11 lambda …
int a,d;// Init them somehowdouble x = [](double a,double d) { return a/b/c/d+c/d+a; }(a,d);
…工作,但海事组织看起来很笨拙.
稍好一点
double x = [a = (double)a,b = (double)b,c = (double)c,d = (double) d] { return a/b/c/d+c/d+a; }();
哦,如果你有一些宏观的乐趣:
#define SPliCE_2(l,r) l##r#define SPliCE_1(l,r) SPliCE_2(l,r)#define SPliCE(l,r) SPliCE_1(l,r)#define TREAT_AS(type,name) name = static_cast<type>(name)#define TREAT_ALL_AS_HELPER_0(type)#define TREAT_ALL_AS_HELPER_1(type,name) TREAT_AS(type,name)#define TREAT_ALL_AS_HELPER_2(type,name,...) TREAT_AS(type,name),TREAT_ALL_AS_HELPER_1(type,__VA_ARGS__)#define TREAT_ALL_AS_HELPER_3(type,TREAT_ALL_AS_HELPER_2(type,__VA_ARGS__)#define TREAT_ALL_AS_HELPER_4(type,TREAT_ALL_AS_HELPER_3(type,__VA_ARGS__)#define TREAT_ALL_AS_HELPER_5(type,TREAT_ALL_AS_HELPER_4(type,__VA_ARGS__)// expand as you will#define TREAT_ALL_AS(type,count,...) SPliCE(TREAT_ALL_AS_HELPER_,count)(type,__VA_ARGS__)
现在用作
double x = [TREAT_ALL_AS(double,4,a,d)] { return a/b/c/d+c/d+a; }();
你也可以automatically count the number of variadic macro arguments.
但说实话,海事组织最好只是写一个命名的功能.
总结以上是内存溢出为你收集整理的在C中说“推动一切浮动”的确定性方式全部内容,希望文章能够帮你解决在C中说“推动一切浮动”的确定性方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)