'constexpr'功能奇怪的行为?
'constexpr' function strange behavior?
有人可以解释我这是如何编译的吗?
constexpr int Add(int a, int b)
{
return a + b;
}
int main()
{
int a, b; //Both left Uninitialized as locals
char arr[Add(a, b)];
cout << sizeof(arr) << endl;
}
似乎数组被定义为未知大小,因为"a"和"b"都有未知值?
活生生的例子。
您展示的在线编译器使用 -std=gnu++1y
作为标准,不使用 -pedantic
。这不会禁用某些扩展,特别是GCC和clang支持作为扩展的C99可变长度数组(VLA(。
要获得警告,请使用 -pedantic
。要获取错误,请使用 -pedantic-errors
(或更一般的-Werror
(。对于此特定扩展,-Wvla
将为g++
,-Wvla-extension
clang++
执行此操作。
也更喜欢-std=c++1y
而不是GNU变体以避免扩展。
叮当当++:
warning: variable length arrays are a C99 feature [-Wvla-extension]
G++:
warning: ISO C++ forbids variable length array 'a' [-Wvla]
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 带内存和隔离功能的SQLite
- 多成员Constexpr结构初始化
- 条件constexpr函数
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- 寻求对 constexpr 功能的澄清
- 在 constexpr 功能中切换
- ConstexPR模板功能的无限递归
- 如何编写工厂功能以在C 中初始化constexpr参考
- 此constexpr虚拟功能技术是否违反了任何C 11/C 14规则
- 静态初始化包含功能指针的对象的constexpr std ::数组
- 在库中展示ConstexPR专用模板功能
- 超载模板功能的constexpr别名
- ConstexPR静态模板功能:G 错误是Clang上的警告
- 在内联和 constexpr 功能的情况下"obey ODR"意味着什么?
- “constexpr”功能是否也应该是“noexcept”
- 'constexpr'功能奇怪的行为?