我考虑过为C ++做一点语言扩展,并为提案写了草稿(http://pdfcast.org/pdf/user-defined-type-qualifiers-1)。
这个想法是,用户可以定义限定符,如const和volatile本身,以确保某些限定代码(即方法)只调用相同的限定符。
问题是这是否会与任何语言规则发生冲突,或者我是否遗漏了任何内容。
答案 0 :(得分:1)
StackOverflow并非真正的主题。但是,“用户定义的类型限定符”是一个很好的想法,也是一个历史悠久的想法。它们通常用于污点分析(即,确保不使用用户控制和潜在恶意的位,就好像它们是可信位;确保在显示之前正确转义所有HTML;这类事情)。
http://www.cs.umd.edu/~jfoster/papers/toplas-quals.pdf将污点分析作为其主要动机,但也提到安全信息流(即,确保加密密钥位等敏感信息不会泄漏到非安全的代码部分。)
也就是说,对于大多数应用程序来说,“用户定义的数据类型”就足够了。你几乎总能机械地转换,例如, std::string [[tainted]] x
Tainted<std::string> x
。{/ p>
Tainted<std::string> x;
cin >> x; // unfortunately, this implicit conversion of Tainted<T>& to T&
// is exactly what we want to avoid