当前位置: 首页 > 知识库问答 >
问题:

获取常量字符的constexpr函数*

酆高翰
2023-03-14

我使用MSVC v141和< code>/std:c 17进行编译。

constexpr const char* test(const char* foo) {
    return foo + 1;
}

constexpr const char* bc = test("abc");

编译得很好,而

constexpr const char* test(const char* foo) {
    constexpr auto bar = foo;
    return bar + 1;
}

constexpr const char* bc = test("abc");

失败原因:

错误C2131:表达式未计算为常量

失败是由在其生命周期之外读取变量引起的

注意:请参阅“FOO”的用法

这是正确的行为还是 MSVC 中的错误?

共有1个答案

东方化
2023-03-14

对我来说,这似乎是预期的行为。用<code>constexpr</code>声明的函数意味着它可以在编译时求值,但不是必须的。因此,函数在运行时求值时也应该有效。这是问题线

constexpr auto bar = foo;

因为它试图从一个非constexpr对象创建一个constexpr对象。

 类似资料:
  • 常量表达式机制是为了: 提供一种更加通用的常量表达式 允许用户自定义的类型成为常量表达式 提供了一种保证在编译期完成初始化的方法(可以在编译时期执行某些函数调用) 考虑下面这段代码: enum Flags { good=0, fail=1, bad=2, eof=4 }; constexpr int operator|(Flags f1, Flags f2) { return Flags(int(

  • 许多Android java方法返回数字常量值。在记录或向用户显示值时,我希望自动将这些值转换为字符串(类似于Windows API/)。然而,除了切换所有可能的值并生成匹配的字符串之外,我找不到一种方法来实现这一点。 例如:返回一个整数值:(0)、(1)、(2)。我想把数字转换成适当的字符串。我可以写一个这样的开关案例: 但我想避免它,尤其是当有超过3个可能的返回值时。 我试着在StackExc

  • 本文向大家介绍字符型常量和字符串常量的区别相关面试题,主要包含被问及字符型常量和字符串常量的区别时的应答技巧和注意事项,需要的朋友参考一下 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置) 占内存大小:字符常量只占2个字节; 字符串常量占

  • 函数名称:获取字符串长度 函数功能:获取字符串长度 函数方法 num = string.len(str) 参数 类型 必填 说明 str string 是 需要计算的字符串 返回值 类型 说明 num number/nil 字符串长度 函数用例 str="JUST DO IT" num = string.len(str) dialog("字符串长度:"..num,5000)

  • 这段代码在g(coliru)中编译得很好,但不能在MSVC(godbolt和我的VS2017)中编译。 (6):错误C2131:表达式未计算为常量 (6):注意:失败是由读取超出其生命周期的变量 (6)引起的:注意:请参阅“this”的用法 哪一个(g或MSVC)是错误的? 这在“请参阅'这个'的用法”中是什么?? 如何在保证编译时间的同时解决它? 在我的实际情况中,是一个复杂的语句,它依赖于其他

  • 问题内容: 我正在尝试获取EditText的字符数。我研究了EditText和TextView类的不同属性,但是似乎没有返回字符数的函数。我尝试使用TextWatcher,但这并不理想,因为有时我会从首选项中将保存的消息加载到EditText中,并且TextWatcher不计算当时未键入的字符。 任何帮助将是巨大的! 干杯! 问题答案: 只需抓取EditText中的文本作为字符串并检查其长度即可: