gpt4 book ai didi

c++ - "C++ most vexing parse"的运行时行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:33 30 4
gpt4 key购买 nike

在尝试回答 this 时我发现没有 () (调用“C++ 最烦人的解析”)的问题 g++ 的输出是 1 (可以在这里看到:http://ideone.com/GPBHy),其中 Visual Studio 给出链接器错误。我无法理解输出如何可以 1,有什么线索吗?

最佳答案

正如问题的答案已经解释的那样,由于“最令人烦恼的解析”语句而不是定义一个名为 str 的对象与两个istream_iterators指定其初始值设定项,被解析为名为 str 的函数的声明返回 string .

所以程序的简单版本解析为, this online sample :

#include<iostream>  

void doSomething()
{
}
void (*ptr)()=&doSomething;

int main()
{

std::cout << ptr << "\n";
std::cout << doSomething;
return 0;
}

输出:

1
1

注意没有重载operator <<这需要 std::ostream和一个函数指针作为参数,这是因为可以有任意数量的用户定义函数类型,当然一个标准的重载 api 不能解释所有这些。

假设编译器试图在现有重载中找到最佳匹配,恰好是 bool (函数指针可以隐式转换为 bool [#1])。特别是,

basic_ostream& operator<< (bool& val );

因为函数指针指向某物而不是null , 该值打印为 1 .


[#1]C++03 4.12 bool 转换

1 An rvalue of arithmetic, enumeration, pointer, or pointer to member type can be converted to an rvalue of type bool.

关于c++ - "C++ most vexing parse"的运行时行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039971/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com