今天在查cout  wcout区别的时候,看到一篇博客(http://blog.csdn.net/hikaliv/article/details/4570956

里面讲到了wchar_t

--------------------------------------------------------------

Win OS 之 wchar_t 与 ANSI/ISO C/CPP 之 wchar_t:

ANSI/ISO C/CPP 中 wchar_t 表示长于 8-bit 的数据类型,至于多长,具体依赖实现。《Unicode 标准 4.0》如是说:

“ANSI/ISO C leaves the semantics of the wide character set to the specific implementation but requires that the characters from the portable C execution set correspond to their wide character equivalents by zero extension.”

“The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers.”

标准可没说 wchar_t 表示的一定是 Unicode 编码,GB2312 也应可由 wchar_t 表示。只不过Win32 下 wchar_t 锁定为 UTF-16,而 Unix-like 通常为 UTF-32。对于亚欧主要文明体的文字,UTF-16 已经足够。

在 VC 下,常量字串 "" 对应 const char* 型,L"" 对应 const wchar_t* 型。前者用来处理各种 Multibytes;而后者指定处理 UTF-16。对应的 cout 与 wcout、string 与 wstring、iostream 与 wiostream 等亦如此。

--------------------------------------------------------------

意思就是说Windows的wchar_t和ANSI/C++里的wchar_t不一样,ANSI/C++里的wchar_t指的是长于8bits的数据类型,具体多长依赖于平台实现。

ANSI/CPP中的wchar_t与编译器相关的,并且也可以是8位。 因此,需要跨任何C/C++编译器的可执行程序不应该使用wchar_t来存储Unicode文本。

wchar_t类型是用来存储编译器定义的宽字符的,想一些编译器里,这可能是Unicode。

但在win32下,wchar_t锁定为了UTF-16。

转一下话题

------------------华丽的分割线------------------------------

想起来在VC++的项目属性里见过【将wchar_t视为内置类型】这个选项(默认为是),

然后又在群里问了一下群友,被告知,如果选则【否】,则wchar_t被定义为

typedef short wchar_t

然后自己试了一下,结果如下

结果是选择【否】的时候,其类型为typedef unsigned short 
wchar_t

同时,群友小伙(一个很牛叉的小伙)又说:这个wchar_t不同会影响到name mangling,于是我又去查了一下what is name mangling,简单点说就是编译器对函数的命名,不同编译器、不同调用约定、不用语言(C/C++),其结果不尽相同。

具体可参见此篇博客(http://blog.csdn.net/xt_xiaotian/article/details/5431410

关于调用约定请看此博客(http://blog.csdn.net/xt_xiaotian/article/details/5363633

自己写了一个简单的DLL,导出了几个函数,使用了不同的调用约定等,请看如下

用dependes看了一下导出函数的名字,如下

再转一下话题

------------------------------------华丽的分割线---------------------------

又看到了右值引用和转移语义,这两个概念一直没弄清楚,看了这篇博客,觉得知道一点嗲了,请戳此(http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html

再再转一下话题

------------------------------------华丽的分割线---------------------------

VC++怎么编译C语言程序

在VC++的项目属性里设置:项目属性—配置属性—C/C++--高级—编译为(编译为C代码TC)

暂且到此,现在时间2014年3月28日 00:24:04

一个【wchar_t】引发的学案的更多相关文章

  1. 一个logstash引发的连环案,关于logstash提示:Reached open files limit: 4095, set by the 'max_open_files' option or default, files yet to open: 375248

    不多说,直接上问题.版本logstash-2.4.0,启动后提示错误: !!! Please upgrade your java version, the current version '1.7.0 ...

  2. 一个字母引发的血案 java.io.File中mkdir()和mkdirs()

    一个字母引发的血案 明天开始放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码: //省略部分代码... Long fileId= (Long) data.get( ...

  3. Vue一个案例引发「内容分发slot」的最全总结

    今天我们继续来说说 Vue,目前一直在自学 Vue 然后也开始做一个项目实战,我一直认为在实战中去发现问题然后解决问题的学习方式是最好的,所以我在学习一些 Vue 的理论之后,就开始自己利用业余时间做 ...

  4. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  5. Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  6. Spring之LoadTimeWeaver——一个需求引发的思考---转

    原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...

  7. 由一个emoji引发的思考

    由一个emoji引发的思考 从毕业以来,基本就一直在做移动端,但是一直就关于移动端的开发,各种适配问题的解决,在日常搬砖中处理了就过了,也没有把东西都沉淀下来,觉得甚是寒颜.现就一个小bug,让我们来 ...

  8. Vue一个案例引发的递归组件的使用

    今天我们继续使用 Vue 的撸我们的实战项目,只有在实战中我们才会领悟更多,光纸上谈兵然并卵,继上篇我们的<Vue一个案例引发的动态组件与全局事件绑定总结> 之后,今天来聊一聊我们如何在项 ...

  9. PHP 中一个 False 引发的问题,差点让公司损失一百万

    PHP 中一个 False 引发的问题,差点让公司损失一百万 一.场景描述 上周我一个在金融公司的同学,他在线上写一个 Bug,差点造成公司损失百万.幸好他及时发现了这个问题并修复了.这是一个由 PH ...

随机推荐

  1. STL函数模板(即算法)一览

    查找算法 adjacent_find:找出一个串中第一个不符合次序的地方 find,find_if:找出第一个符合条件的元素 find_first_of:在一个串中寻找第一个与另一个串中任意一个元素相 ...

  2. 利用 __FUNCTION__ 宏打印函数调用信息

    __FUNCTION__ 宏表示当前所在函数名: __FILE__ 宏表示当前所在文件路径: __LING__ 宏表示当前所在行: 利用对象离开函数时调用析构函数销毁的特点,打印出函数执行结束的信息 ...

  3. 开源入侵检测系统OSSEC搭建之二:客户端安装

    上一篇文章中已经将OSSEC服务端的安装以及客户端的Key导出操作做了解说,接下来在另一台虚拟机中安装客户端,与安装服务端类似同样需要安装ossec,步骤如下. 一.下载ossec-hids-2.8. ...

  4. 转response.sendRedirect()与request.getRequestDispatcher().forward()区别

    JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是 ...

  5. 24个有用的PHP类库分享

    目前,PHP是用于Web开发的最流行的脚本语言.你可以在互联网上随手找到关于PHP大量资料,包括文档.教程.工具等等.PHP不仅是一种功能丰富的语言,它还能帮助开发人员轻松地创建更好的网络环境.为了进 ...

  6. 如何学习一个新的PHP框架

    如今的PHP框架层出不穷,我不是这方面的专家,甚至不能熟练地使用其中的一种,所以我不做推荐,也不想讨论哪些算是框架哪些不算框架.这里我要讨论的是如何才能更快地开始使用某个新的框架. 首先你当然必须选择 ...

  7. PHP程序员的40点陋习

    1.不写注释 2.不使用可以提高生产效率的IDE工具 3.不使用版本控制 4.不按照编程规范写代码 5.不使用统一的方法 6.编码前不去思考和计划 7.在执行sql前不执行编码和安全检测 8.不使用测 ...

  8. iOSTab bar

    http://www.apkbus.com/android-130504-1-1.html #import #import "FirstViewController.h"#impo ...

  9. windows和mac下分别配置虚拟主机

    windows下配置 1.找到apache的配置文件,httpd.conf 2.找到 LoadModule rewrite_module modules/mod_rewrite.so 去掉前边的# 3 ...

  10. 面试题_48_to_65_Java 集合框架的面试题

    这部分也包含数据结构.算法及数组的面试问题 48) List.Set.Map 和 Queue 之间的区别(答案)List 是一个有序集合,允许元素重复.它的某些实现可以提供基于下标值的常量访问时间,但 ...