C++ 链式ostream内部行为及其在MSVC上的结果(与Clang比较)
MSVC与GCC/Clang之间的流、内部字符串和操作顺序问题 各位好, 我最近才开始更认真地与MSVC合作,参与我的一个跨平台项目,在通过链式STD流测试输出时(即,根据,连续的C++ 链式ostream内部行为及其在MSVC上的结果(与Clang比较),c++,visual-c++,variadic-templates,operator-precedence,post-increment,C++,Visual C++,Variadic Templates,Operator Precedence,Post Increment,MSVC与GCC/Clang之间的流、内部字符串和操作顺序问题 各位好, 我最近才开始更认真地与MSVC合作,参与我的一个跨平台项目,在通过链式STD流测试输出时(即,根据,连续的obj.foo()),C++17直到VS 2017 15.7.14.0才得以实现。您必须升级或不升级链式STD流 测试 #包括 int f() { 静态int i=0; 返回i++; } int main() { std::cout Language->C++语言标准=默认值)我得到10,函数的计算结果是相反的 使用P
obj.foo()),C++17直到VS 2017 15.7.14.0才得以实现。您必须升级或不升级链式STD流
测试
#包括
int f()
{
静态int i=0;
返回i++;
}
int main()
{
std::cout Language->C++语言标准=默认值)我得到10,函数的计算结果是相反的
使用Properties->Configuration Properties->Language->C++语言标准=isoc++17标准(/std:C++17),我得到了预期的01
但是,如果我运行asker的代码…我仍然会看到错误的响应。删除大部分示例并添加额外的调试行(并将cerr
替换为cout
,以查看是否有一些深层次的魔力)
#包括
#包括
#包括
类样本{
std::字符串s;
int x=0;
公众:
Sample()=默认值;
friend std::ostream&Operator如果我阅读正确,那么直到15.7.14才实现的是不够好的。@user4581301这听起来值得回答。同意。我只需要多读一点来确认我阅读正确。我遇到了类似的问题,刚刚更新完Visual Studio,我仍然遇到同样的错误(但是谢谢)。您的附加编辑是不同的。在这种情况下,println(i++,i++,i++)
调用仍然未排序,即使在c++17中也是如此。但在您的第一个案例中,似乎是msvc错误。谢谢,但更新没有任何改变,我将相应地编辑我的帖子。Smurf。@Saachz我所能提供的是VS 2015,并且可以确认它没有按预期工作。启动虚拟机以启动2019社区。好的,谢谢,最新版本st我似乎有这个问题(在我这边)。这里有一个很好的版本,同样的数据顺便说一句:我刚刚下载并安装了2019个。然后我自己就能看到。这个问题应该通过一个简单的std::cout就可以看到。我可能是错了I++
的噱头。我想我应该是对的,但是g++仍然在骂我,我得到了错误的答案。我可能错过了一些小技巧y、 替换为函数调用。正在更新答案
in func with 2
in func with 1
in func with 0
0
0
0
content : 0