用户定义的限定符

时间:2013-09-21 17:21:46

标签: c++ c++11 c++14

我考虑过为C ++做一点语言扩展,并为提案写了草稿(http://pdfcast.org/pdf/user-defined-type-qualifiers-1)。

这个想法是,用户可以定义限定符,如const和volatile本身,以确保某些限定代码(即方法)只调用相同的限定符。

问题是这是否会与任何语言规则发生冲突,或者我是否遗漏了任何内容。

1 个答案:

答案 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