- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的问题:
int addsomeStuff(std::ostream &cout, int b) {
cout << b;
return 2;
}
int main() {
int a = 1;
cout << a << addsomeStuff(cout, 3) << endl;
return 0;
}
Output: 312
谁能给我解释一下输出,我希望输出更像 132为什么编译器在生成运算符之前首先运行函数。
我是如何遇到这个问题的:我有一个容器类,可以将数据保存在字节数组中。不知何故 'container.WriteConvert(..);'在名为“a”的整数之前插入字节数组。有没有人对此有解释。
我可以使 WriteConvert 静态或添加一个额外的行这将解决这个问题,而不是返回一个 Container& 但我有点感兴趣编译器按此顺序放置它的原因是什么。 p>
int a = 2;
Container container;
container << a << container.WriteConvert("TestString");
int b = 0;
container >> b;
cout << b;
// The ouput of 'b' is some stupid Data which is caused by WriteConvert.
我没有写这个 WriteConvert static 或在 Container 类之外的原因是有一些原因的。我也有 ReadConvert,我不想有多行。如果有人有其他想法,我愿意接受其他解决方案,而不会增加行数。
int b = 0;
string output
container >> b >> container.ReadConvert(output);
cout << b;
最佳答案
C++17
之前,链式运算符参数的求值顺序未指定。这意味着执行可以首先评估 addsomeStuff(cout, 3)
调用(因此首先打印 3
)然后继续打印 a
和addsomeStuff(cout, 3)
的返回值。
在 C++17
中,求值的顺序是明确定义的 - 从左到右。这意味着如果您的编译器正确实现了 C++17
标准,则唯一可能的输出是 132
。
如果您受困于 C++17
之前的标准,您需要首先评估所有参数,然后在链式运算符调用中使用它们或不要t 使用链式运算符调用:
int main() {
int a = 1;
cout << a;
cout << addsomeStuff(cout, 3) << endl;
return 0;
}
前一种方法可能会改变行为,但会得到明确定义。
关于c++ - 成员(member)调用接线员<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57939628/
这是代码 override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) if (PFUser.
我是一名优秀的程序员,十分优秀!