我最近查看了我的旧代码,我无法弄清楚这是做什么的,或者它是否有效.代码类似于:
map<string, string> map;
map[string1] = ("s", string2);
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 14
这是一种混淆.逗号运算符从左到右计算所有参数,但丢弃除最后一个参数之外的所有参数.整个表达式的形式类型是最终参数的类型.
(另请注意,逗号本身就是一个排序点.)
string2在键string1下成为地图中的值.
该表达式"s", string2使用内置的1个 逗号运算符.它具有以下语义:
在逗号表达式中
E1, E2,表达式E1被评估,其结果被丢弃,并且在评估表达式E2开始之前完成其副作用(注意用户定义的运算符,不能保证排序)(直到C++ 17).逗号表达式结果的类型,值和值类别正是第二个操作数E2的类型,值和值类别.
如果是您的代码段,它根本没用,它的唯一目的是让读者感到困惑.由于评估"s"没有副作用,因此代码与此相同:
map<string, string> map;
map[string1] = string2;
Run Code Online (Sandbox Code Playgroud)
operator,匹配参数.如果有,它可以做任何事情,这个答案的其余部分不适用.您必须查看源代码以找出表达式求值的内容.
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |