当前位置:  编程技术>综合
本页文章导读:
    ▪More Effective C++读书笔记5      Item 5:谨慎定义类型转换函数 隐式类型转换时在编译期间由编译器来执行的。除了C/C++默认的基本类型的隐式类型转换外,用户自定义类型的隐式转换方式有两种: 1.定义隐式类型转换.........
    ▪contains与compareDocumentPosition方法详解          1.  nodeA .contains( nodeB ):     这个方法起先用在 IE ,用来确定 nodeB 是否包含在另一个  nodeA 中。     注意点:如果 .........
    ▪初探Windows8      Windows8是最近新出的系統,我嘗了一下鮮,但是可以毫不誇張的說,這個系統卻是我至今為止讓我最折騰的系統,以下是我的一些過程和心得: 一、安裝篇: 首先,Windows8分成了很多個版本.........

[1]More Effective C++读书笔记5
    来源: 互联网  发布时间: 2013-11-05
Item 5:谨慎定义类型转换函数

隐式类型转换时在编译期间由编译器来执行的。除了C/C++默认的基本类型的隐式类型转换外,用户自定义类型的隐式转换方式有两种:
1.定义隐式类型转换运算符
2.单参数构造函数或者多参数构造函数,但第一个参数以后的参数都有默认值。

隐式类型转换运算符例子:
class Rational
{
public:
    Rational(int numerator = 0, int denominator = 1);
    operator double() const;   //不需要返回类型,函数名称就是返回类型
};

Rational r(1, 2);
double d = 0.5 * r; //r 转换为double类型


标题是要谨慎定义类型转换函数,为什么要谨慎呢,就是说这些定义的类型转换函数有可能会产生不是你想要的结果,比如你不想进行转换的时候,却给你转换了。如下情况:
cout << r;  //Rational并没有定义operator << 运算符,但是,编译器会找到operator double()转换函数,将r转换为double输出。但这并不是你想要的结果。
解决方法是用不使用语法关键字的等同的函数来替代转换运算符。如定义一个toDouble()函数来代替operator double()转换函数。STL中的string就提供了一个c_str()函数来转换到char*。

通过单参数构造函数进行隐式类型转换更难消除。而且在很多情况下这些函数所导致的
问题要甚于隐式类型转换运算符。
我们来看一个例子:
temlplate<typename T>
class Array
{
public:
    Array(int lowBound, int hightBound);
    Array(int size);
    T& operator[](int index);
};
Array<int> a(10);
Array<int> b(10);
for (int i = 0; i < 10; ++i)
{
    if (a == b[i]) // 哎呦! "a" 应该是 "a[i]"
    {
        do something for when
        a[i] and b[i] are equal;
    }
    else
    {
        do something for when they're not;
    }
}

我们的编译器注意到它能通过调用 Array<int>构造函数能转换 int 类型到 Array<int>类型,这个构造函数只有一个 int 类型的参数。然后编译器如此去编译,生成的代码就象这样:
if (a == static_cast< Array<int> >(b[i]))

解决方案是利用一个最新编译器的特性,explicit 关键字。
作者:goof 发表于2013-1-5 12:18:58 原文链接
阅读:25 评论:0 查看评论

    
[2]contains与compareDocumentPosition方法详解
    来源: 互联网  发布时间: 2013-11-05
    1.  nodeA .contains( nodeB ):
    这个方法起先用在 IE ,用来确定 nodeB 是否包含在另一个  nodeA 中。
    注意点:如果  nodeA 和  nodeB 相一致,.contains() 将返回 true ,虽然,一个元素不能包含自己。

     2、nodeA.compareDocumentPosition(nodeB):
    这个方法这个方法是 DOM Level 3 specification 的一部分,比contains方法强大得多,可以比较两个元素的相对位置,返回结果如下:
    Bits          Number        Meaning 
000000         0              元素一致 
000001         1              节点在不同的文档(或者一个在文档之外) 
000010         2              节点 B 在节点 A 之前 
000100         4              节点 A 在节点 B 之前 
001000         8              节点 B 包含节点 A 
010000         16             节点 A 包含节点 B 
100000         32             浏览器的私有使用
     对于第一列代表的意思,可能很多同学以前不太了解,比特码可以将多个状态按位存储成一个数字,而多个状态是相互独立的,例如:
<div id="a">
 <div id="b"></div>
</div>
<script>
 alert( document.getElementById("a").compareDocumentPosition(document.getElementById("b")) == 20);
</script>
    一旦一个节点 A 包含另一个节点 B,包含 B(+16) 且在 B 之前(+4),则最后的结果是数字 20 。如果你查看比特发生的变化,将增加你的理解。
000100 (4) + 010000 (16) = 010100 (20)

    3.兼容IE的compareDocumentPosition实现:
// Compare Position - MIT Licensed, John Resig
function comparePosition(a, b){
 return a.compareDocumentPosition ?
 a.compareDocumentPosition(b) :
 a.contains ?
  ( a != b && a.contains(b) && 16 ) +
  ( a != b && b.contains(a) && 8 ) +
  ( a.sourceIndex >= 0 && b.sourceIndex >= 0 ?
   (a.sourceIndex < b.sourceIndex && 4 ) +
   (a.sourceIndex > b.sourceIndex && 2 ) :
   1 ) :
  0;
}


    4.应用:

 PPK 提供了一个关于通过创建一个 getElementsByTagNames 方法使新功能可以被使用的很棒的例子:

// Original by PPK quirksmode.org
function getElementsByTagNames(list, elem) {
        elem = elem || document;         
        var tagNames = list.split(’,’), results = [];         
        for ( var i = 0; i < tagNames.length; i++ ) {
                var tags = elem.getElementsByTagName( tagNames[i] );
                for ( var j = 0; j < tags.length; j++ )
                        results.push( tags[j] );
        }         
        return results.sort(function(a, b){
                return 3 - (comparePosition(a, b) & 6);
        });
}

我们现在可以使用他来按次序构建一个站点的目录:getElementsByTagNames("h1, h2, h3");



作者:zhengyinhui100 发表于2013-1-5 12:16:33 原文链接
阅读:29 评论:0 查看评论

    
[3]初探Windows8
    来源: 互联网  发布时间: 2013-11-05

Windows8是最近新出的系統,我嘗了一下鮮,但是可以毫不誇張的說,這個系統卻是我至今為止讓我最折騰的系統,以下是我的一些過程和心得:


一、安裝篇:

首先,Windows8分成了很多個版本,什麼RT版啊,什麼Core版,什麼Professional版啊,什麼企業版啊等等等等,這裏要特別注意一下,如果你是準備開發Windows Phone 8的話,且需要用到Windows Phone 8的模擬器的話,建議你最好選擇Professional版,為什麼?因為Windows Phone 8的模擬器需要一個叫做Hyper-V的東東,這個東東具體是做什麼的我不太清楚,我只知道只有Professional版才支持這個東東,想當初,我就是因為裝錯了版本,裝了Core版,開不了這個東西,導致我整個系統都要重新裝過,何其杯具,下面這段話是摘自微軟的官方:

Client Hyper-V requires a 64-bit system with second level address translation (SLAT) capabilities and additional 2 GB of RAM (Windows 8 Pro only)


好吧,選好了要安裝的版本後,先上網找一下你要安裝的版本的key,在安裝時需要輸入,有些網友說沒有這一步,可能是版本不同吧,反正我在安裝前就要輸入了,這個key以後要激活,激活的辦法......很抱歉,我到現在都還沒有激活,之前有網友說用Skype打英國的電話來激活,我試過,但已經無效了。

現在在說說我在安裝過程中遇到的問題吧,首先先說一下我機器的配置:




這個配置也可以安裝黑蘋果,我已經完美運行了,聲卡驅動有點折騰,到時會寫一篇文章詳細介紹安裝的過程。

再說一下,我現在有兩個硬盤,一個裝了黑蘋果,另一個就是現在準備要安裝的Win8,但是在進入到安裝界面後,在分區那個界面,始終進不了下一步,有一句提示,我忘了是什麼,那時上網查了很久,才知道是兩個硬盤搞的鬼,於是先禁用掉那個裝黑蘋果的硬盤,貌似在BIOS裏禁用不了(也可能是我不懂得怎麼禁用),只有拆機箱拔線了,拔完線後,安裝一切正常,另外,這裏分區的時候要說明一點,給系統盤(通常為C盤)分區最好給50GB以上,如果你的硬盤夠大,給大一點會更好,因為我發現Win8的C盤實現是太占空間了,即使沒有安裝什麼額外的軟件,它也會升的很快。

順利安裝完Win8了,關於Win8的操作之類我也不想在這裏贅述,也沒有必要,一開始是不習慣,很快就適應了,只簡單說幾點:

1. 關機,按Alt+F4,或鼠標移動到右上角顯示Charm菜單,選擇Settings(設置),就有關機的選項了。

2. 關閉Metro界面下的應用程序,這個我琢磨了很久,終於在網上找到了答案,把鼠標移動到最上方,按住,一直垂直拖到最下方就可以關閉當前的程序了。


其他不說了,再說說Visual Studio這個開發工具吧:

下載就不說了,可以上官網下載,不過貌似是在線下載的,網上好像也有離線的iso境像吧,各位自行百度或Google吧。

Windows Phone 8的SDK自帶了一個叫做Visual Studio Express版本的IDE,這個有點雞肋,其實用完整版的Visual Studio 2012就可以了,不過Windows Phone 8 SDK還是要安裝,否則還是開發不了Win Phone 8的程序。

要啟動Windows Phone 8的模擬器,先需要開啟上面所說的Hyper-V選項,在Control Panel(控制面板)-> Programs(程序) -> Turn Windows features on or off(啟用或關閉Windows功能)的選項卡中可以找到這個選項,在前面打上勾,按確定就可以了。

第一次啟動的時候還會提示沒有權限,賦予它權限說OK了。


上面是針對Windows Phone的,那對平板的呢,有個問題糾結了我很久,我自身買了臺Surface RT,研究了下,沒有發現有USB的輸入口,只有一個PC主板那樣的輸出口,我就納悶了,這樣怎麼進行真機調試呢?網上給了我答案,遠程調試,即通過WiFi來把調試的項目安裝到真機中,下面來簡單介紹一下怎麼做:

1. 在Surface上需要安裝一個叫Remote Debugger的軟件,可以上官網找,記得這裏要安裝ARM版的。這個軟件類似於一個開啟了端口的Server端,用過Android開發的91助手的遠程調試你懂得。

2. 打開剛剛安裝的Remote Dubugger,在菜單中選擇Tools -> Options,在彈出的窗口中選擇No Authentication,其他不用改。

3. 在PC上的Visual Studio 2012中,右鍵你的項目選擇屬性,在Debug那一項,就可以找到Remote Debug了,在那裏輸入你的Surface的IP地址,然後運行時選擇Remote Device就可以了,簡單吧?

需要注意注意的一點是,只有Windows8的項目有這一項,Windows Phone 8項目是沒有的!!尼瑪,當初我就是建個Windows Phone 8的項目,結果怎麼都找不到網上別人說的Remote Debug那一個選項,還以為是我的Visual Studio版本比較另類,卸載了又重裝,這點比較坑爹!


好了,該吐槽的也吐槽完了,也想不到有什麼說的了,以後想到再補充吧。。


作者:qq280948982 发表于2013-1-5 12:08:13 原文链接
阅读:30 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3