&引用;使用;C++; 我正在学习C++。我的教授使用了一些类似于 using filePath = std::string; using setOfPaths = std::set<filePath>; using iterOfSet = setOfPaths::iterator; using listOfIter = std::list<iterOfSet>; using iterList = listOfIter::iterator; using fileName = std::string; using mapOfFileName = std::map<fileName, listOfIter>; using iterOfMap = mapOfFileName::iterator; setOfPaths _setOfPaths; mapOfFileName _mapOfFileName; iterOfSet setIter;

&引用;使用;C++; 我正在学习C++。我的教授使用了一些类似于 using filePath = std::string; using setOfPaths = std::set<filePath>; using iterOfSet = setOfPaths::iterator; using listOfIter = std::list<iterOfSet>; using iterList = listOfIter::iterator; using fileName = std::string; using mapOfFileName = std::map<fileName, listOfIter>; using iterOfMap = mapOfFileName::iterator; setOfPaths _setOfPaths; mapOfFileName _mapOfFileName; iterOfSet setIter;,c++,c++11,using,C++,C++11,Using,使用关键字的好处是什么?使用关键字的用于定义类型别名。您的教授使用它的原因是: 可读性 更具描述性 避免不必要的typename 可读性和描述性 您可以使用类型别名在语义上(并且仅限于此)限制特定类型,从而使名称对特定用途更具描述性 例如: using fileName = std::string; fileName别名用于描述文件名字符串,而不仅仅是任何字符串。这也使得函数签名具有可读性 我觉得我必须再重复一遍:这只是一个别名。任何以fileName为参数的函数都可以与任何std::st

使用
关键字的好处是什么?

使用
关键字的
用于定义类型别名。您的教授使用它的原因是:

  • 可读性
  • 更具描述性
  • 避免不必要的
    typename
可读性和描述性 您可以使用类型别名在语义上(并且仅限于此)限制特定类型,从而使名称对特定用途更具描述性

例如:

using fileName = std::string;
fileName
别名用于描述文件名字符串,而不仅仅是任何字符串。这也使得函数签名具有可读性

我觉得我必须再重复一遍:这只是一个别名。任何以
fileName
为参数的函数都可以与任何
std::string
参数配合使用

不必要的
typename
s 有些可能看起来不必要,例如:

using setOfPaths = std::set<filePath>;
与:

关于类型安全的注记 这实际上并不比根本不使用别名更安全。同样,
fileName
std::string
是完全相同的类型。两者都可以互换使用


下一步可能是定义一个特定的
fileName
class/struct类型,它有自己的特定不变量。

出于好奇,你的教授对这个问题的回答是什么?毕竟,这是他的代码,因此,如果可以的话,我们不妨先去找那匹马。关于使用
及其各种语言风格的主题。@WhozCraig:the horse??这真的很难读IMO@Quentin从未听说过“直接从马嘴里”吗?@Quentin一句老话,“直接从马嘴里”。起源是可疑的,但我相信这是一个希望,人们可以直接问马为什么比赛输了,而不是听骑师的蹩脚借口,实际上,骑师把马拉短以赢得几次侧注。要是那匹马能告诉你到底发生了什么就好了。我正要以同样的方式回答这个问题。使用短名称也更方便,很像
typedef
。这个答案的第一个可读性示例非常糟糕<代码>标准::字符串常量和文件名
或类似项将通过id进行充分描述。
使用MapIDToFileName=std::map希望能更好地说明这一点。“不管怎么说,答案很好。”裁判官:我敢肯定是的。或者,只有当前面的参数是模板参数时,才需要这样做?typedef或使用它的好处之一是,您可以轻松地在代码中全面更改基础类型,而无需搜索和替换,当然前提是基础类型是兼容的。因此,即使可读性没有增加,正如@WhozCraig在std::string中所指出的那样,也有可能在以后更改基础类型,而不会意外地替换本来应该保持std::string的类型。@tanz,如果你喜欢这个答案,那么我相信你会很感激你选择它作为答案。
using setOfPaths = std::set<filePath>;
template<typename Type>
struct something {
    using something_iter = typename std::set<Type>::iterator;
};
template<typename Container>
using itertype = typename Container::iterator;

template<typename Type>
struct something {
    using something_iter = itertype<std::set<Type>>;
}; 
template<typename Type>
using vec = std::vector<Type>;