1

我知道新的 C++ 标准允许用户定义文字,并且它们的生成可以在编译时完成。

但是,我对整个模板元编程领域还是很陌生,我正在尝试一些示例,但仍然没有成功,因为这是我第一次接触这个特殊功能。

所以假设我有一个字符串:

std::string tmp = "This is a test message";

我想在编译时使用:

std::string tmp = "This is a test message"_encrypt;

甚至有可能我正在尝试尝试吗?

我目前正在使用 VS2015,因此感谢您提供任何帮助或反馈。

4

1 回答 1

1

甚至有可能我正在尝试尝试吗?

是的,有可能*。您可以预先计算并直接放入源代码的内容也可以由编译器在编译时完成。

但是,您不能使用std::string. 它不是文字类型。就像是:

 constexpr std::string tmp = "some string literal"

永远不会编译,因为std::string通常std::basic_string没有constexpr构造函数。

因此,您必须将const char []其用作元编程的输入;之后,您可以将其分配给std::string.
注意:元编程有一些您需要考虑的限制:您无法访问许多原本拥有的工具,例如newor malloc:您必须在堆栈上分配变量。


*编辑:正如@ms 所指出的,不完全使用 UDL。实际上,您会收到一个指向const chars 的指针和字符串的长度。这在一个场景中是相当严格的constexpr,我怀疑是否有可能找到一种方法来处理该字符串。在“正常”元编程中,您可以拥有一个常量表达式的大小,编译时加密是可能的。

于 2015-07-31T13:19:49.833 回答