我这里有一个C++学习演示:
char c = 'M';
short s = 10;
long l = 1002;
char * cptr = &c;
short * sptr = &s;
long * lptr = &l;
cout << "cptr:\t" << static_cast<void*>(cptr) << '\n';
cout << "cptr++:\t" << static_cast<void*>(++cptr) << '\n';
cout << "sptr:\t" << sptr << '\n';
cout << "sptr++:\t" << ++sptr << '\n';
cout << "lptr:\t" << lptr << '\n';
cout << "lptr++:\t" << ++lptr << '\n';
cout << c << '\t' << static_cast<void*>(cptr) << '\t' << static_cast<void*>(++cptr) << '\n';
cout << s << '\t' << sptr << '\t' << ++sptr << '\n';
cout<< l << '\t' << lptr << '\t'<< ++lptr << '\n';
编译器警告:
谁能向我解释一下吗?如何修复它?
从 C++17 开始,代码是正确的.
C++17 之前a 的操作数的求值<<
链没有排序,因此代码导致了未定义的行为。
编译器警告表明您没有在 C++17 模式下进行编译。要修复它,您可以:
- 以 C++17 模式编译,或
- 分开
<<
链成多个cout <<
没有的地方的陈述x
and ++x
在同一个声明中。
Note:截至目前,所有版本的 g++ 似乎都存在 bug,并且没有正确实现这些排序要求,请参阅这个线程更多示例。这些警告可以被视为指示编译器错误;它们不仅仅是虚假的警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)