Ash*_*sha 4 c++ compiler-construction g++ visual-studio
在试图回答这个问题,我没有找到()(它调用"C++最棘手的解析")G ++的输出1(可以在这里看到:http://ideone.com/GPBHy),其中视觉工作室给出一个链接错误.我无法理解输出如何1,任何线索?
随着问题的答案已经解释,由于"最棘手的解析"的说法,而不是定义一个名为对象str与两个istream_iterators指定其初始化,解析为命名函数的声明str,它返回一个string.
因此,该程序的简单版本解析为此在线示例:
#include<iostream>
void doSomething()
{
}
void (*ptr)()=&doSomething;
int main()
{
std::cout << ptr << "\n";
std::cout << doSomething;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
1
Run Code Online (Sandbox Code Playgroud)
请注意,没有重载operator <<将一个std::ostream和一个函数指针作为参数,这是因为可以有任意数量的用户定义的函数类型,并且当然标准重载的api不能解释它们全部.
鉴于编译器试图找到恰好存在的现有重载之间的最佳匹配bool(函数指针可隐式转换为bool[#1]).特别是,
basic_ostream& operator<< (bool& val );
Run Code Online (Sandbox Code Playgroud)
由于函数指针指向某个而不是null,因此该值打印为1.
[#1] C++ 03 4.12布尔转换
1算术,枚举,指针或指向成员类型的指针的右值可以转换为bool类型的右值.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |