#include<iostream>
using namespace std;
int main(){
cout<"Yes";
}
Run Code Online (Sandbox Code Playgroud)
它可以编译,但是当它运行时,它什么也不做。这是其他地方的编译错误。编译器是 gcc 4.9.2
和....相比
#include<iostream>
using namespace std;
int main(){
cout<<"Yes";
}
Run Code Online (Sandbox Code Playgroud)
它缺少“<”,但仍然可以编译。
我预计这是一个编译错误,就像变量一样,如下所示:
#include<iostream>
using namespace std;
int main(){
cout<"Yes";
}
Run Code Online (Sandbox Code Playgroud)
下面的代码也会发生这种情况。
#include<iostream>
using namespace std;
int main(){
cin>"Yes";
}
Run Code Online (Sandbox Code Playgroud)
编辑:同样的事情发生
#include<iostream>
int main(){
std::cout<"Yes";
}
Run Code Online (Sandbox Code Playgroud)
另外,我启用了编译器警告,但没有。
Rus*_*lan 10
GCC<6.1(包括您的 4.9.2)中的默认 C++ 标准是gnu++98,而对于 GCC\xe2\x89\xa56.1 则是gnu++14(如记录的,例如此处)。因此,后一个编译器默认情况下不会接受此代码,因为explicit operator bool()它存在于 C++11 以来的 iostream 中,而不是operator void*()C++98 中(请参见cppreference)。
如果您打开警告,您可能会收到警告:
\n$ g++-4.8 test.cpp -o test -Wall\ntest.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99:\ntest.cpp:5:15: warning: value computed is not used [-Wunused-value]\n std::cout < "Yes";\n ^\nRun Code Online (Sandbox Code Playgroud)\n其中test.cpp包含示例代码:
#include <iostream>\n\nint main()\n{\n std::cout < "Yes";\n}\nRun Code Online (Sandbox Code Playgroud)\n
在 C++11 之前,支持的方式if (std::cin >> var)是流对象隐式转换为void *.
在应用转换->和-> ->后,因此std::cout<"Yes"被评估为调用内置的。bool operator<(void*, const void*)std::basic_iosvoid *const char[4]const char*const void*
自 C++11 起,现在有一条规则,即可以在 等中使用 的explicit转换。这样, 就被更改为,并且重载解析正确地发现没有匹配boolifwhileoperator void*explicit operator boolstd::cout<"Yes"
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |