语法命题:模板化类型声明的可读性

时间:2010-04-19 11:18:27

标签: c++ syntax

我想知道以下语法是否会对您的意见有所帮助,因为代码可读性可以改进和自我评论代码:

std::map<std::string name, std::vector<int> scores> myMap;  

在这个例子中它清楚地说明了,不需要其他评论,我们使用myMap变量是什么。

期待您的意见。

4 个答案:

答案 0 :(得分:3)

在我看来,更简单,更好,更实用的是实现一些typedef,例如:

typedef std::string NAME;
typedef std::vector<int> SCORES;

std::map<NAME, SCORES> myMap;

答案 1 :(得分:1)

就我个人而言,我很乐意写using namespace std;作为命名空间的一般概念,不建议这样做,但std无处不在,以至于恕我直言,它完全没问题,并节省了大量的打字。

map<string, vector<int> > myMap;  

对于任何具有至少一些经验的C ++程序员来说,上面的内容是可读的(可能更多,因为更少的多余的std::语法)。请注意,我删除了名称:我不认为它们在实际代码中添加了太多。在真正重要的地方,只需简短评论:

// maps names to an array of scores
map<string, vector<int> > myMap;  

针对注释的常见参数是因为它们没有代码的真正语义值而无法维护它们。您提出的语法中的名称也是如此,因此通过添加更多语法无法获得任何结果。

答案 2 :(得分:1)

C ++标准委员会将争论10年,然后拒绝它。选择一个好的变量名,myMap是没用的:

std::map<...> NameToScoreMap;

这是一个好的编辑器,所以每次使用地图时都不必完全输入。功能性匈牙利人的想法基本相同。

答案 3 :(得分:0)

myMap的更具描述性的名称可能会有所帮助,例如scores_by_name

那怎么样:

std::map<std::string /*name*/, std::vector<int> /*scores*/> myMap;  

std::map<std::string, std::vector<int> > myMap; //name - scores

新语法除了评论之外不会做任何其他事情。 (自我评论代码的优势在于,语言会强制注释为真,但在这种情况下,标识符的语法含义为零。)

也许这个命题可能有助于智能感知,但是你也不必允许:

std::string name myString;