gpt4 book ai didi

c++ - 为什么 'std::endl' 在语句 'std::cout << std::endl;"中使用时需要命名空间限定,给定参数相关查找?

转载 作者:可可西里 更新时间:2023-11-01 18:18:40 28 4
gpt4 key购买 nike

我正在查看 argument-dependent lookup 上的维基百科条目, 并且(2014 年 1 月 4 日)给出了以下示例:

#include<iostream>

int main()
{
std::cout << "Hello World, where did operator<<() come from?" << std::endl;
}

...带有以下评论:

Note that std::endl is a function but it needs full qualification, since it is used as an argument to operator<< (std::endl is a function pointer, not a function call).

我的想法是评论不正确(或根本不清楚)。我正在考虑将评论更改为 say, instead

Note that std::endl needs full qualification, because ADL does not apply to the arguments of a function call; it only applies to the function name itself.

维基百科的评论不正确,我说得对吗?我提议的更改是否正确? (即,在此示例中,我对 ADL 的理解是否正确?)

最佳答案

维基百科的内容没有错。

std::cout << "Hello World, where did operator<<() come from?" << std::endl

等价于下面的(假设operator<<被实现为一个自由函数)

operator<<(
operator<<(std::cout, "Hello World, where did operator<<() come from?"),
std::endl)

这显然需要对 cout 进行命名空间限定和 endl因为这是(函数的)argument-dependent 查找,而不是“argument lookup”
参数决定要调用的函数,而不是调用方式。

关于c++ - 为什么 'std::endl' 在语句 'std::cout << std::endl;"中使用时需要命名空间限定,给定参数相关查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926217/

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