gpt4 book ai didi

c++ - Constexpr 如果使用非模板类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:29 26 4
gpt4 key购买 nike

#include <iostream>

int foo(int x) {
if constexpr (std::is_same_v<decltype(x), std::string>) {
x = std::string();
}
}

int main(void)
{ return 0; }

此代码无法在 GCC 7 或 Clang 5 上编译:

error: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘int’ in assignment
x = std::string();

由于引用的行位于 constexpr if 分支中,该分支的计算结果应为 false,程序是否可以正常编译?

最佳答案

if constexpr 规范定义了丢弃的语句。然后它继续定义当结果在实例化之后 不依赖于值时,丢弃的语句不会被实例化。这意味着语句在模板实例化期间被丢弃。此外,只有当条件值依赖于模板参数时,该语句才会被丢弃。

关于c++ - Constexpr 如果使用非模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com