用户定义的限定符

User defined qualifiers

本文关键字:定义 用户      更新时间:2023-10-16

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

这个想法是,用户可以自己定义像 const 和 volatile 这样的限定符,以确保一些限定代码(即方法)只调用相同的限定符。

问题是这是否会与任何语言规则相冲突,或者我是否错过了任何东西。

不是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