用户定义的限定符

Kle*_*ern 8 c++ c++11 c++14

我想到了C++的一点语言扩展,并为一个提案写了草稿(http://pdfcast.org/pdf/user-defined-type-qualifiers-1).

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

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

Quu*_*one 1

对于 StackOverflow 来说,这并不是真正的主题。但是,是的,“用户定义的类型限定符”是一个很好的想法,并且有着悠久的历史。它们通常用于污点分析(即,确保用户控制的和潜在的恶意位不会像受信任的位一样使用;确保所有 HTML 在显示之前都已正确转义;诸如此类的事情)。

http://www.cs.umd.edu/~jfoster/papers/toplas-quals.pdf将污点分析作为其主要动机,但也提到了安全信息流(即,确保加密密钥位等敏感信息不会被泄露)不要泄漏到代码的非安全部分)。

也就是说,对于大多数应用程序来说,“用户定义的数据类型”就足够了。您几乎总是可以机械地转换,例如std::string [[tainted]] x转换为Tainted<std::string> x.

Tainted<std::string> x;
cin >> x;  // unfortunately, this implicit conversion of Tainted<T>& to T&
           // is exactly what we want to avoid
Run Code Online (Sandbox Code Playgroud)