标题:求助:wcout无输出
只看楼主
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
结帖率:97.22%
已结贴  问题点数:20 回复次数:1 
求助:wcout无输出
cout输出正常,同样的程序换成wcout无输出。
DEBUG添加断点,观察wstring字符串正确,就是wcout无输出。
记得好像以前遇到过这个问题。
查找以前发的帖子,找到了解决方法。
添加一句std::wcout.imbue( std::locale(std::locale(),"",std::locale::ctype) );
wcout就可以正常输出了。。。。
但也只能是照猫画虎,不知其意。。。。

求教:std::wcout.imbue( std::locale(std::locale(),"",std::locale::ctype) ); 是什么意思。。。。







搜索更多相关主题的帖子: 帖子 输出 std 方法 添加 
2022-12-09 14:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
不知道的话,也没关系,反正也几乎碰不到它(gcc就只同意设置global locale)

首先是 locale 的概念,这个概念比较失败,所以很少人谈论它,略。
std::locale() 它获得当前使用的global locale,而默认当然是从C语言继承过来的"C"。(C语言的setlocale函数就有两个特殊参数,"C" 和 "",其中""表示系统本身的本地环境)
std::locale(std::locale(),"",std::locale::ctype) 是创建一个locale实例,这个实例从std::locale() --- 也就是 global locale --- 继承而来,除了 std::locale::ctype(字符分类特征) 来自于名为""的locale --- 也就是系统本身的本地环境
简而言之,std::locale(std::locale(),"",std::locale::ctype) 就是创建了一个「其它不变,除了字符分类特征改为系统本身环境」的本地环境

其次,wcout为什么需要imbue?这又是一个历史遗留的发育不良,同样略。(甚至wcout本身都出生太早了)
wcout.imbue 的作用是告知怎么将 wchar_t[] 转换成系统输出需要的字符编码。
2022-12-09 16:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510904-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.316730 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved