-
2018-01-16 23:05:23
接触过C语言的都知道,有逗号表达式。
X=(5+5,6+6)其实把12赋给X。
在java里也有,叫逗号操作符。
Java里唯一用到逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,而且那些语句均会独立执行。通过逗号操作符,可以在for语句定义多个变量,但是它们必须是相同的类型。
public class TestFor { public static void main(String[] args) { for(int i=1,j=i*2;i<5;i++,j=i*3,j=i*4){ System.out.println("i="+i+" "+"j="+j); } } }
for语句中的int定义涵盖了i和j,在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。在一个控制表达式中,定义多个变量的这种能力只限于for循环适用,在其他任何选择或迭代语句中都不能使用这种方式。/*Output: i=1 j=2 i=2 j=8 i=3 j=12 i=4 j=16 *///:~
更多相关内容 -
JavaScript中的逗号操作符
2021-10-25 22:58:41逗号操作符可以用来在一条语句中执行多个操作,如下所示: 在一条语句中同时声明多个变量是逗号操作符最常用的场景。不过,也可以使用逗号操作符来辅助 赋值。在赋值时使用逗号操作符分隔值,最终会返回表达式...逗号操作符可以用来在一条语句中执行多个操作,如下所示:
在一条语句中同时声明多个变量是逗号操作符最常用的场景。不过,也可以使用逗号操作符来辅助
赋值。在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值:
在这个例子中,num 将被赋值为 2,因为 2 是表达式中最后一项。逗号操作符的这种使用场景并不 多见,但这种行为的确存在。
二、逗号操作符的拓展用法
逗号操作符还有很多意想不到的操作,例如可以使我们的代码最大程度的进行简写,如下所示:
let arr = [{ id: 1, value: '正式' }, { id: 2, value: '非正式' }]
当我们的需要将arr的值处理成为{1: '正式', 2: '非正式'}的时候
按照我们正常的写法来说,用reduce方法是最合适不过的。
let newArr= arr.reduce((acc,item)=>{ acc[item.id]=item.value return acc },{}) console.log(newArr); 这时我们打印输出newArr得到的值就是 {1: '正式', 2: '非正式'}
可以看出这样也是可以得到我们想要求的值,但是如何让这些代码一行就能达到效果呢?
这里我们就可以用到逗号操作符了
let newArr= arr.reduce((acc,item)=> (acc[item.id]=item.value, acc),{}) console.log(newArr); 这里我们输出打印的值也一样可以得到我们需求的值 {1: '正式', 2: '非正式'}
由此可见逗号操作符可以使我们的代码尽可能的进行压缩
-
JavaScript中的逗号操作符(基础使用和拓展用法)
2021-10-24 15:51:45一、逗号操作符的基础用法 逗号操作符可以用来在一条语句中执行多个操作,如下所示: 在一条语句中同时声明多个变量是逗号操作符最常用的场景。不过,也可以使用逗号操作符来辅助 赋值。在赋值时使用逗号操作...一、逗号操作符的基础用法
逗号操作符可以用来在一条语句中执行多个操作,如下所示:
在一条语句中同时声明多个变量是逗号操作符最常用的场景。不过,也可以使用逗号操作符来辅助
赋值。在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值:
在这个例子中,num 将被赋值为 2,因为 2 是表达式中最后一项。逗号操作符的这种使用场景并不 多见,但这种行为的确存在。
二、逗号操作符的拓展用法
逗号操作符还有很多意想不到的操作,例如可以使我们的代码最大程度的进行简写,如下所示:
let arr = [{ id: 1, value: '正式' }, { id: 2, value: '非正式' }]
当我们的需要将arr的值处理成为{1: '正式', 2: '非正式'}的时候
按照我们正常的写法来说,用reduce方法是最合适不过的。
let newArr= arr.reduce((acc,item)=>{ acc[item.id]=item.value return acc },{}) console.log(newArr); 这时我们打印输出newArr得到的值就是 {1: '正式', 2: '非正式'}
可以看出这样也是可以得到我们想要求的值,但是如何让这些代码一行就能达到效果呢?
这里我们就可以用到逗号操作符了
let newArr= arr.reduce((acc,item)=> (acc[item.id]=item.value, acc),{}) console.log(newArr); 这里我们输出打印的值也一样可以得到我们需求的值 {1: '正式', 2: '非正式'}
由此可见逗号操作符可以使我们的代码尽可能的进行压缩
-
C++ 逗号操作符的含义以及重载
2020-04-28 15:16:45逗号操作符(,)在c\c++中的原生语义: 1)逗号表达式用于将多个子表达式连接为一个表达式 2)逗号表达式的值为最后一个子表达式的值 3)逗号表达式的前N-1个子表达式可以没有返回值 4)逗号表达式按照从左到右...逗号操作符(,)在c\c++中的原生语义:
1)逗号表达式用于将多个子表达式连接为一个表达式
2)逗号表达式的值为最后一个子表达式的值
3)逗号表达式的前N-1个子表达式可以没有返回值
4)逗号表达式按照从左到右的顺序计算每个子表达式的值
例子:
#include <iostream> #include <string> using namespace std; void func(int i) { cout << "func() : i = " << i << endl; } int main() { int a[3][3] = { (0, 1, 2), //此处没有使用 {} 所以变成了逗号表达式 (3, 4, 5), (6, 7, 8) }; int i = 0; int j = 0; while( i < 5 ) func(i), //实际上等价于这样 func(i),i++; i++; for(i=0; i<3; i++) { for(j=0; j<3; j++) { cout << a[i][j] << endl; } } (i, j) = 6; //等价于 j = 6; cout << "i = " << i << endl; cout << "j = " << j << endl; return 0; }
运行结果
func() : i = 0 func() : i = 1 func() : i = 2 func() : i = 3 func() : i = 4 2 5 8 0 0 0 0 0 0 i = 3 j = 6
逗号运算符的重载试验
#include <iostream> #include <string> using namespace std; class Test { int m_value; public: Test (int i) { m_value = i; } int value() { return m_value; } }; Test& operator , (const Test& a , const Test& b) { //按照逗号运算符的原生语义 返回第二个参数的引用 return const_cast<Test&>(b); //使用const_cast去除b参数的只读属性 } Test func(Test& i) { cout << "func() : i = " << i.value() << endl; return i; } int main() { Test t0(0); Test t1(1); Test t2 = (t0,t1);//逗号表达式 t2使用t1进行初始化 cout << t2.value() << endl; Test t4 = (func(t0),func(t1)); cout << t4.value() << endl; return 0; }
运行结果
1 func() : i = 1 func() : i = 0 1
这里我们可以看到,逗号运算符并没有按照从左到右运行,违背了其原生语义。
那到底是什么原因呢?
其实在上面的代码对t4进行初始化时的代码是
Test t4 = (func(t0),func(t1));
等效于
Test t4 = operator , (func(t0),func(t1));
在c/c++中,进入函数体之前,必须完成所有参数的计算,且参数的计算次序也是不确定。所以出现了这样的运行结果。
最后我们做一个小实验,去除之前代码中的逗号操作符重载,编译执行,得到的结果如下:
1 func() : i = 0 func() : i = 1 1
结果正确,且编译器没有报错,说明实际上编译器就能处理包含对象的逗号操作符。重载逗号操作符是没有意义的。
-
C++深度解析 逗号操作符 --- 逗号表达式,重载逗号操作符(38)
2019-01-02 10:33:53C++深度解析 逗号操作符 --- 逗号表达式,重载逗号操作符(38) 逗号操作符( , )可以构成逗号表达式 逗号表达式用于将多个子表达式连接为一个表达式。 逗号表达式的值为最后一个子表达式的值。 ... -
JavaScript-逗号操作符
2022-03-12 18:42:58最近发现 JavaScript 有一个叫做逗号操作符的小东西,感觉很有意思,分享给大家。 功能: 对它的每个操作数求值(从左到右),并返回最后一个操作数的值。 语法: expr1, expr2, expr3... 代码: let a = 1;... -
C++语法小记---重载逗号操作符
2019-09-25 05:15:30重载逗号操作符 逗号操作符算法:从左到右依次计算每一个表达式的值,整个逗号表达式的值等于最右边表达式的值,前面n-1个表达式可以没有返回值 重载逗号操作符: 参数必须有一个class成员 重载... -
Java 逗号操作符
2020-03-20 15:17:43逗号操作符(注意不是逗号分隔符),Java中唯一用到逗号操作符的地方就是for循环的控制表达式,在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句。 public static void main(String[] args) ... -
第39课 逗号操作符的分析
2020-02-23 21:51:54逗号操作符 逗号操作符(,)可以构成逗号表达式 逗号表达式用于 将多个子表达式连接为一个表达式 逗号表达式的值为 最后一个子表达式的值 逗号表达式中的 前 N-1 个子表达式可以没有返回值 逗号表达式按照 从左向... -
逗号操作符
2018-01-02 23:54:48逗号操作符(,)可以构成逗号表达式 - 逗号表达式用于将多个子表达式连接为一个表达式 - 逗号表达式的值为最后一个子表达式的值 - 逗号表达式中的前N-1个子表达式可以没有返回值 - 逗号表达式按照从左向右的... -
c++ 赋值操作符、条件操作符、逗号操作符
2022-03-14 10:04:16//赋值操作符 操作符 说明 = 简单赋值操作符,如a=b += 加法赋值操作符,如a+=b -= 减法赋值操作符,如a-=b *= 乘法赋值操作符,如a*=b /= 除法赋值操作符,如a/=b %= 取... -
【c++深度解析3】逗号操作符
2019-01-17 00:49:10在c++逗号操作符可以重载吗,重载逗号操作符有意义吗? 答: 在c++中可以重载逗号操作符,在工程开发中不要重载逗号操作符,那是无意义的 下面我们复习下逗号操作符: 1.逗号操作符(,)可以构成逗号表达式 2.... -
C语言中的逗号操作符
2021-05-19 18:31:34在变量声明语句、函数调用中,逗号是做分隔符用的,例如:int a,b,c;scanf("%f%f%f",&f1,&f2,&f3);C语言还允许用逗号连接表达式。例如:x=5.6,y=2.1,10+x,x+y,这里用3个逗号运算符将4个表达式连接成一个... -
C++中逗号操作符的重载
2020-02-10 11:42:16文章目录1 C++中逗号操作符的重载1.1 逗号操作符的原生语义1.2 重载逗号操作符 1 C++中逗号操作符的重载 1.1 逗号操作符的原生语义 逗号操作符(,)可以构成逗号表达式: 逗号表达式用于将多个子表达式连接为一个... -
逗号操作符陷阱
2013-12-11 16:29:28 不少C++ newbie都会问到这... 其实,我们是经常会用到逗号操作符的,但是并不是所有代码里出现的逗号都是逗号操作符。 让我们先从一个类的示例代码开始: class mynum { public: mynum(double ndb,...) -
第三十九课 逗号操作符的分析
2022-05-05 20:07:29逗号操作符 -
逗号操作符的分析
2021-12-01 23:05:11逗号操作符: 逗号操作符(,)可以构成逗号表达式 逗号表达式用于将多个子表达式连接为一个表达式 逗号表达式的值为最后一个子表达式的值 逗号表达式中的前N-1个子表达式可以没有返回值 逗号表达式按照从左向右的顺序... -
c++ 逗号操作符重载
2016-04-05 12:32:10Overload Operator Comma 首先看看think in c++ 给出的一个重载的例子 #include using namespace std; class After { public: const After& operator,(const After&) const { cout ,()" ; -
5.1.11 逗号操作符(或其他句法技巧)
2021-01-05 17:47:19“C++还为逗号操作符提供了另外两个特性。 首先,它确保先计算第一个表达式,然后计算第二个表达式(换句话说,逗号操作符是一个顺序点)。 其次,C++规定,逗号表达式的值是第二部分的值。” “在所有操作符中,... -
从头认识java-2.6 逗号操作符
2015-10-24 22:28:10这一章节我们来聊一下逗号操作符。注意:不是逗号分割符。package com.ray.ch03; public class Test { public static void main(String[] args) { for (int i = 0, j = 0; i ; i++, j += 2) { System.out.... -
学习笔记之逗号操作符(内附操作符的优先级表)
2019-10-20 11:21:17逗号操作符与逗号表达式 逗号操作符 逗号操作符是一个二元操作符,其标准使用形式如下: 表达式1,表达式二; 其计算顺序是从左到右的顺序先计算表达式1,在计算表达式二。 例如: a += 2; c*4; //用逗号操作符组合... -
【C++深度解析】27、不要重载逗号操作符
2020-02-09 22:54:28文章目录1 原生的逗号操作符2 重载逗号操作符 1 原生的逗号操作符 逗号表达式用于将多个子表达式连接为一个表达式 逗号表达式的值为最后一个子表达式的值 逗号表达式中的前 N-1 个子表达式可以没有返回值 逗号... -
C++学习——c++逗号操作符说明(附加全部运算符优先级)
2020-03-21 18:45:42逗号表达式 又称为“顺序求值运算符”。逗号表达式的一般形式为 (表达式1,表达式2,表达式3……表达式n) 求解过程是:先求解表达式1,再求解表达式2,…。整个逗号表达式的值是最后一个表达式n的值。 例如这里的... -
【C++深度剖析教程18】逗号操作符的分析
2018-01-29 01:35:43今天来学习C++中的逗号操作符。那么什么是逗号操作符呢? *逗号操作符(,)可以构成逗号表达式 逗号表达式用于将多个子表达式连接为一个表达式 逗号表达式的值为最后一个子表达式的值 逗号表达式的前N-1个表达式... -
逗号操作符以及(0,function)()
2018-07-14 02:55:40逗号操作符 概述:逗号操作符对它的每个操作数求值(从左到右),并返回最后一个操作数的值。当你想要在期望一个表达式的位置包含多个表达式时,可以使用逗号操作符。这个操作符最常用的一种情况是:for 循环中提供... -
逗号操作符 & (0, function)()
2019-04-02 11:30:33逗号操作符对它的每个操作对象求值(从左至右),然后返回最后一个操作对象的值。 var 语句中的逗号不是逗号操作符,因为它不是存在于一个表达式中。 下面的代码,只有最后一个表达式被返回...