回 帖 发 新 帖 刷新版面

主题:[讨论]还是那个问题

 

回复列表 (共3个回复)

沙发

回楼主:
先赞一个:您C不是一般的好:)
1. C++里没有所有C99新增的特性,包括复合字面儿值:)
2. 这个应该是C99的特性,但我没有细查理论依据,故不好评论:)

板凳

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 楼

谢谢2楼和3楼的夸奖和详细分析,尤其是3楼较透彻的讲解。

我来回复

您尚未登录,请登录后再回复。点此登录或注册