主题:[讨论]还是那个问题
windy0will
[专家分:2300] 发布于 2010-07-11 18:09:00
最后更新于:2010-07-13 16:42:00
回复列表 (共3个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-07-11 21:47:00
回楼主:
先赞一个:您C不是一般的好:)
1. C++里没有所有C99新增的特性,包括复合字面儿值:)
2. 这个应该是C99的特性,但我没有细查理论依据,故不好评论:)
板凳
eastcowboy [专家分:25370] 发布于 2010-07-11 22:48:00
1. 就我的了解,C++确实没有“Compound literals”,也就是楼主所说“符合字面值”这样的概念。
从设计上讲,C语言之所以引入这个概念,是为了让结构体更加好用。而C++因为本身就对结构体进行了增强,引入构造函数等概念,所以基本上不需要这样的东西了。
在我看来,C和C++的分歧会越来越大,它们都会按照自己的理念,在自己的方向上越走越远。虽然仍然相互借鉴,但是最终的标准却不一定相兼容了。
2. 根据C99标准,确实是可以修改的。以下是C99的相关原文:(第77页,6.5.2.5 Compound literals,第13条)
EXAMPLE 5 The following three expressions have different meanings:
"/tmp/fileXXXXXX"
(char []){"/tmp/fileXXXXXX"}
(const char []){"/tmp/fileXXXXXX"}
The first always has static storage duration and has type array of char, but need not be modifiable; the last two have automatic storage duration when they occur within the body of a function, and the first of these two is modifiable.
翻译:
例5,下列三个表达式具有不同的含义:
"/tmp/fileXXXXXX"
(char []){"/tmp/fileXXXXXX"}
(const char []){"/tmp/fileXXXXXX"}
第一个,总是具有静态的生存期,而且类型是char的数组,不需要是可以被修改的(译注:因实现决定,可以是无法修改,也可以是可以修改)。后两个,如果是在函数体之内定义,则拥有自动的生存期(译注:如果是在函数体之外定义,则拥有静态的生存期),并且前一个是可以被修改的。
相信这已经足够说明问题了。
3 楼
windy0will [专家分:2300] 发布于 2010-07-13 16:44:00
谢谢2楼和3楼的夸奖和详细分析,尤其是3楼较透彻的讲解。
我来回复