constexpr int aaa{20}; constexpr int bbb{256}; char aa[aaa][bbb]; char bb[512]; int len{static_cast<int>(strlen("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))}; len = static_cast<int>(len + strlen(bb) + strlen(aa[0]) + strlen("%%' ")); 这段代码报以下这个错误"len" is implicitly
时间: 2024-03-27 19:36:38 浏览: 144
defined as "int" in this context, which is not allowed in C++11
这个错误是因为在 C++11 标准中,使用 "int" 进行隐式定义是不被允许的。你需要显式地定义 "len" 的类型,例如:
```cpp
constexpr int aaa{20};
constexpr int bbb{256};
char aa[aaa][bbb];
char bb[512];
size_t len{strlen("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")};
len = len + strlen(bb) + strlen(aa[0]) + strlen("%%' ");
```
这里我将 "len" 的类型改为了 "size_t",因为在计算字符串长度时,返回的类型是 "size_t",因此将 "len" 定义为 "size_t" 更加合适。
相关问题
constexpr int
引用\[1\]中提到,constexpr函数的函数体中不能出现非常量表达式之外的语句,除了using指令、typedef语句、static_assert断言和return语句。而引用\[2\]中解释了const和constexpr在定义常量时的等价性,它们都可以在编译阶段计算出结果。引用\[3\]中说明了C++11新标准允许将变量声明为constexpr类型,这样编译器可以验证变量的值是否是一个常量表达式。因此,根据这些引用内容,可以得出结论:constexpr int是用来声明一个整型常量的语法。
#### 引用[.reference_title]
- *1* *2* [constexpr](https://blog.csdn.net/m0_52902391/article/details/120308866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v12^insert_chatgpt"}} ] [.reference_item]
- *3* [C++知识整理系列(三)—— constexpr常量表达式](https://blog.csdn.net/aruewds/article/details/118938121)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v12^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
constexpr int GetVal(); constexpr int i = GetVal();
这段代码定义了一个返回值为`int`类型的函数`GetVal()`,并使用`constexpr`进行修饰。接着,定义了一个`constexpr`变量`i`,并将其初始化为调用`GetVal()`函数的返回值。由于`GetVal()`函数也是`constexpr`的,因此可以在编译时求值,从而得到`i`的值。
需要注意的是,使用`constexpr`修饰变量的条件是变量必须满足以下限制:
1. 变量的类型必须是字面值类型、对象类型或数组类型;
2. 变量必须被初始化为常量表达式;
3. 变量的初始化表达式中只能包含字面值、其他`constexpr`变量或函数的调用、类型转换和内置运算符。
如果变量满足以上所有限制,那么就可以将其声明为`constexpr`变量,从而使其能够在编译时求值。在本例中,由于`GetVal()`函数也是`constexpr`的,因此可以在编译时调用该函数并求得其返回值,进而将`i`初始化为一个常量。
阅读全文