constexpr函数中声明为静态的文字字符串
literal string declared static in constexpr function
我试图使constexpr成为一些现有的代码,但得到了消息
错误:"my_string"在"constexpr"函数中声明为"static"
简化了很多,代码是:
template <typename T>
constexpr
int foo(const int x)
{
static // error: 'my_string' declared 'static' in 'constexpr' function
constexpr char my_string[] = "my foo error message!";
if (x == 0)
{
std::cout << my_string << std::endl;
}
return x;
}
class boo
{
public:
constexpr boo()
{
static // error: 'constructor_string' declared 'static' in 'constexpr' function
constexpr char constructor_string[] = "my constructor error message.";
}
};
字符串当然在其他地方使用,我希望确保它们永远不会重复(因此是静态的)(为了与C++03兼容,我希望保持静态的使用,在C++03中,使用BOOST_constexpr_OR_CONST无法获得constexpr)。
当前constexpr函数中不能有静态变量。有人建议,如果变量是用编译时表达式初始化的,则可以放宽这一要求。
由于您正在为字符串文字赋值,我建议您删除"static",并假设编译器以任何一种方式使其尽可能优化(在实践中,它应该这样做)。另一种选择是使字符串成为static constexpr
作为私有类成员,或者在命名空间范围内。
相关文章:
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 比较 std::string 和 C 样式字符串文字
- 如何从char16_t字符串文字中读取双精度?
- 如何在 C 宏中将变量字符串与文字字符串连接起来?
- 我如何知道 boost::any 是否包含文字字符串
- C 专用模板功能接收文字字符串
- 如何使变量成为文字字符串
- 可以一个#define一个文字字符串,其中包含用于资源文件的非ANSI字符的字符串
- 从文字字符串生成编译时常量整数
- 当一个函数可以被赋予一个 char* 或文字字符串时,声明这个函数的正确方法是什么?
- 如何在 C 或C++宏中使用函数作为文字字符串
- GCC中可能的错误:结构中的文字字符串类型
- 文字字符串有效,但字符串在 file.open() 中不起作用
- C/C++:文字字符串中"xNNN"格式的固有歧义
- constexpr函数中声明为静态的文字字符串