是否可以使用if constexpr删除控制流语句
Is it possible to remove control flow statements with if constexpr?
我正在测试if constexpr
的可能性,我想知道是否可以用它删除控制流语句。
我正在测试的代码是:
int main() {
void *indirect_label;
if constexpr (false) {
goto label; // Rejected by MSVC, clang and GCC
}
if constexpr (false) {
continue; // Rejected by clang and GCC
}
if constexpr (false) {
break; // Rejected by clang and GCC
}
if constexpr (false) {
goto *indirect_label; // Rejected by clang and MSVC
}
return 1;
}
我为GCC和clang实现的间接gotos语言扩展添加了一个测试。
考虑到如果条件为false,if constexpr
应该丢弃这些语句,为什么MSVC和GCC接受代码的某些部分(但不同(,而clang拒绝所有四个部分。
什么行为是正确的?
if constexpr
不是宏。事实上,它只在特定环境中获得与常规if
语句不同的幂,特定情况下,条件本身基于模板参数。即便如此,被丢弃的声明也必须至少具有潜在的合法性。
相关文章:
- 从控制台中删除最后打印的元素
- 是否可以使用if constexpr删除控制流语句
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 删除提升存档对象也会删除与其关联的流?
- C ++,如何从控制台中输入的字符串中删除字母?
- 如何控制或优化或删除或释放 UNION 中未使用的内存
- C++ 如何从控制台中删除一行?
- xcode 从源代码中删除奇怪的控制字符
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- f流删除特定的开始到结束行
- 如何从 SYCL 内核中提取控制流?
- 删除指向流的类成员指针时出现Segfault
- 控制流图生成器的c++代码
- C++(或任何其他语言)中的优雅控制流
- gcc-gprof/gcov/other-如何获取函数调用/出口+控制流语句的序列
- 在执行二进制序列化时,删除字符串流结果的const-ness是否安全?
- 在线程间的控制流中使用不带互斥锁的非原子布尔值是否安全?
- 如何创建控制流?C++
- GCC中枚举开关的控制流分析不足
- 混淆控制流分析从Parasoft c++测试