首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++:带三元线if语句的cout

C++:带三元线if语句的cout
EN

Stack Overflow用户
提问于 2011-04-20 06:38:20
回答 7查看 14.1K关注 0票数 10

我得到这个错误:“错误:没有上下文类型信息的重载函数”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout << (i % 5 == 0) ? endl : "";

我正在做的事情是可能的吗?是我做错了,还是我必须重载<<操作符?

EN

回答 7

Stack Overflow用户

发布于 2011-04-20 06:50:13

它不会以这种方式工作(即使您修复了优先级错误)。这里有两个问题,第二个比第一个更严重。

第一个问题是std::endl是一个模板。它是一个函数模板。模板必须是专门化的。为了专门化该模板,编译器必须知道(推断)模板参数。当你这样做的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::cout << std::endl;

编译器使用operator <<期望的特定函数指针类型来确定如何专门化std::endl模板。

然而,在您的示例中,您实际上是通过将std::endl移动到operator <<子表达式中来将std::endl?:“分离”的。现在编译器必须首先编译这个表达式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(i % 5 == 0) ? endl : ""

无法编译此表达式,因为编译器不知道如何专门化std::endl模板。在没有任何上下文的情况下,无法推断模板参数。

例如,这个简单的C++程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
int main() {
   std::endl;
}

也会因为同样的原因而无法编译:没有上下文,编译器就不知道如何实例化std::endl

您可以通过显式指定模板参数来“帮助”编译器解决该问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(i % 5 == 0) ? endl<char, char_traits<char> > : "";

这将显式地告诉编译器如何实例化endl。您收到的原始错误消息将会消失。

然而,这将立即揭示该表达式的第二个更严重的问题: specialized endl是一个函数(在此上下文中,它衰减为函数指针),而""是一个字符串文字。你不能像那样在?:操作符中混合使用函数指针和字符串。这些类型不兼容。它们不能一起用作三进制?:的第二个和第三个操作数。编译器将对第二个问题发出不同的错误消息。

因此,基本上,您在这里遇到最新问题就好像您试图做一些类似于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout << (i % 5 == 0 ? 10 : "Hi!");

这将不会进行编译,原因与您的表达式不会进行编译的原因相同。

因此,您尝试编写的表达式不能以这种方式编写。在不尝试使用?:操作符的情况下重写它。

作为支持,请参阅以下文字记录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat qq.cpp
#include <iostream>
using namespace std;
int main (void) {
    int i = 5;
    cout << ((i % 5 == 0) ? endl : "");
    return 0;
}

$ g++ -o qq qq.cpp
qq.cpp: In function 'int main()':
qq.cpp:5: error: overloaded function with no contextual type information
票数 34
EN

Stack Overflow用户

发布于 2011-04-20 06:47:24

?运算符的两个参数必须是相同类型的(至少在潜在的提升、隐式构造函数、强制转换运算符等加入之后)。std::endl实际上是一个函数模板(详细信息如下),然后流调用它来影响其状态:它不像""那样是字符串文字。

所以,你不能准确地做到这一点,但你可能可以得到你真正想要的行为-考虑是否...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expr ? "\n" : ""

...meets你的需要-它是类似的,但不会刷新流(我的意思是,std::cout通常应该尽可能不频繁地刷新-特别是通过低级库代码-因为这样可以提供更好的性能)。(它也更灵活,例如expr ? "whatever\n" : "" /不能将endl附加到字符串文字。)

例如,对于GCC 4.5.2,endl为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<typename _CharT, typename _Traits>
    inline basic_ostream<_CharT, _Traits>& 
    endl(basic_ostream<_CharT, _Traits>& __os)
    { return flush(__os.put(__os.widen('\n'))); }
票数 15
EN

Stack Overflow用户

发布于 2011-04-20 06:47:34

如果other.

  • endl是一个模板,而上下文没有提供足够的信息可供选择,则
  • ?:的两个备选方案必须具有相同的类型,或者其中一个可以转换为模板。所以它甚至没有类型。(这是您的错误消息)。
  • 正如其他人已经说过的,绑定不是您期望的绑定。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5726427

复制
相关文章
Nginx 不能访问 (找不到)Django 静态文件的原因
django 部署模式为 debug = False(debug = True 找不到静态文件基本是配置错误,去详细检查 settings.py 里的 STATIC_URL、STATICFILES_DIRS 配置)
卓越笔记
2023/02/18
3.1K0
Nginx 不能访问 (找不到)Django 静态文件的原因
gitblit 外网不能访问
Google Chrome 默认非安全端口列表,虽然以上方法可以解决问题,但建议尽量避免以下端口:
2019/03/29
7.9K0
gitblit 外网不能访问
redis非本地不能访问
访问redis数据库,使用redis-cli -h ip -p port无法连接。查了以后发现是redis配置问题。  首先,停止redis服务。  然后,修改redis.conf文件,将其中的bind 127.0.0.1注释掉,同时将protected-mode yes改为no。  最后,重启redis。  问题解决。
似水的流年
2019/12/06
3.1K0
Django 限制访问频率
最近做了一个系统由于部分接口需要进行耗时操作,因而不希望用户进行频繁访问,需要进行访问频率限制。如果要自己实现一个访问限制功能相对来说也不会太复杂,并且网上有各种代码可以参考。如果自己不想实现这个代码可以使用 Django Ratelimit 。
obaby
2023/02/24
1.4K0
本地IP可以访问 外网IP 不能访问网站
https://jingyan.baidu.com/article/624e74590da64d34e8ba5aa0.html
用户6158975
2019/09/04
10.9K0
OpenStack Pike dashboard noVNC 不能访问
现象:openstack dashboard novnc不能查看,报Failed to connect to server (code: 1006)错误
后端云
2018/10/24
2.6K0
再谈《Django 限制访问频率》
之前提到使用ratelimit来限制访问频率,我的目的是根据用户来限制访问频率,但是实际上通过下面的代码并没有达到效果,如果用多个浏览器进行同时刷新,会存在跳过限制的情况
obaby
2023/02/24
9730
如何设置电脑不能访问公网但是能够访问内网
方法: 删除本地路由 手动添加只能访问内网的路由 首先查看本地路由 打开cmd 输入 ipconfig /all 通常默认网关对应的路由即是默认路由
我是李超人
2020/08/21
4.4K0
如何设置电脑不能访问公网但是能够访问内网
win8不能解析DNS导致不能访问外网问题
win8不能解析DNS导致不能访问外网问题     win8系统以前都可以正常上网,早上发现不能访问外网问题,内网可以访问。找运维同事查看后,发现是DNS不能解析问题,这个问题可能是win8自身的bu
闵开慧
2018/04/02
4.5K0
win8不能解析DNS导致不能访问外网问题
Django 实现统计网站访问状态
网站访问状态统计(饼状图): 统计Web容器的日志数据,并通过饼状图将访问状态统计出来,例如404状态.
微软技术分享
2022/12/28
9850
Django配置runserver实现远程访问
如果是在另一台电脑上web访问要用 python manage.py ip:port (一般使用8000)的形式;监听所有ip用0.0.0.0如下:
Devops海洋的渔夫
2019/05/30
2.4K0
Sftp只允许用户访问指定的目录,不能访问其他目录
在一些生产环境中,有时,用户需要传数据到服务器,但是配置ftp服务比较麻烦,此时,我们可以为用户创建sftp账户,让用户使用sftp来上传下载所需的数据。Sftp账号即为系统账号,将账户密码给用户,用户除了能登录sftp上传下载数据外,还可以访问系统中的其他目录,由此,给我们的系统带来了安全隐患,再次,我们需要配置用户只能通过sftp登录系统下载上传所需的数据。
joshua317
2021/01/13
11.1K1
Django之views视图函数
views视图函数属于MTV中逻辑处理的部分 视图函数包含着两个对象,HttpRequest对象和HttpResponse对象
py3study
2020/01/19
9360
k8s service不能访问排错
对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作。如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希望这份文档能帮助您找出问题所在。
iginkgo18
2021/06/22
1.5K0
k8s service不能访问排错
对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作。如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希望这份文档能帮助您找出问题所在。 ​
iginkgo18
2022/05/09
2.2K0
k8s service不能访问排错
Django实现统计网站访问次数、访问 ip 、受访页面
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
7.4K1
框架篇-Django博客应用-访问文章
3.Blog.objects.get 是 django 中封装的对数据库的操作,此处用于获取指定文章内容。
小团子
2019/07/18
6610
框架篇-Django博客应用-访问文章
云服务器uwsgi内网访问但外网不能访问的解决
按照网上的教程配置uwsgi,内网可以正常访问,但是外网不通。教程很多,但都没有提到外网不通的坑。这里随便贴一个https://cloud.tencent.com/developer/article/1563400
用户9227809
2021/11/26
14.5K0
django Throttling 节流 限制接口访问次数
限制类似于权限,因为它确定是否应该授权请求。Throttles表示临时状态,用于控制客户端可以对API发出的请求的速率。
Autooooooo
2020/11/09
1.6K0
点击加载更多

相似问题

在django测试客户端中访问raw_post_data

24

Django中的raw_post_data解码问题

13

使用Django将raw_post_data保存为FileField

10

Django "render“不能访问Pylance

1222

Django - Javascript不能访问DOM?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文