1 c++中的c子集部分与标准c的不同之处:
(1)c中32位机器上 char c = 'a'; sizeof(c) = 1;sizeof('a') = 4;
而在c++中sizeof('a') = 1;
原因:
C99标准的规定,'a'为整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。
C++标准规定,'a'为字符字面量(character literal),被看成是char型,所以占1字节
(2)void*指针赋值给另外一个类型的指针时,c++规定必须进行强制类型转化,而在c中无此要求。
2 c++语义二义性的问题:
1 class Timer {
2 public:
3 Timer();
4 };
5
6 class TimeKeeper {
7 public:
8 TimeKeeper(const Timer& t);
9
10 int get_time();
11 };
12
13 int main() {
14 TimeKeeper time_keeper(Timer());
15 return time_keeper.get_time();
16 }
对于该条语句:TimeKeeper time_keeper(Timer());
可能会被解释为两种情况:
(1) 一个变量定义式(TimeKeeper类型的变量,使用匿名实例对象Timer进行初始化);
(2) 函数声明式(返回值为TimeKeeper类型,参数为函数指针)。
大多数情况下我们期望的是第一种情况,然而,c++标准中却将其解释为第二种。
解决方法:TimeKeeper time_keeper((Timer()));增加一队括号,强制编译器将其解释为变量的定义式。
ref:http://en.wikipedia.org/wiki/Most_vexing_parse
原文链接: https://www.cnblogs.com/moonlove/archive/2012/05/24/2517315.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/51045
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!