Почему результат разный при одинаковых стандартах языка С++?
В Microsof Visual Studio (2022, версия 17.4.4) запустил следующую программу:
#include <iostream>
class my_stack
{
static const int MAX_SIZE = 100;
int stack[MAX_SIZE];
int size;
public:
void push(int a)
{
stack[size++] = a;
}
int pop()
{
return stack[--size];
}
my_stack()
{
size = 0;
}
};
int main()
{
my_stack st;
for (int i = 0; i < 5; ++i)
{
st.push(i);
}
std::cout << st.pop() << (st.pop(), st.push(6), st.pop()) << st.pop();
return 0;
}
Результат работы при стандартах языка C++14 и C++17 - 236 и 462 соответственно.
То же самое запустил в VS Code на Linux/Ubuntu (22.04.02 LTS) на C++ стандарта C++14 и C++17 компилятора g++, но результат только 462, причём при любой другой версии (C++98, C++11, C++20, C++23) - то же самое.
(стандарт языка задавал в tasks.json через -std=
)
- Почему резльтаты разные???
- Файлы .vscode:
- tasks.json:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-std=c++17"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger.",
"presentation": {
"clear": true
}
}
],
"version": "2.0.0"
}
- c_cpp_properties.json (вроде он лишний, но всё равно добавлю)
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-x64",
"configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
}
Источник: Stack Overflow на русском