C++ 编译时三元条件
C++ compile time ternary conditional
请帮我弄清楚 C++ 中编译时三元条件的语法:
#include <iostream>
#include <type_traits>
int main(void)
{
//const auto y = constexpr(std::is_null_pointer_v<decltype(nullptr)>) ? 777 : 888.8;
const auto y = constexpr(std::is_null_pointer_v<decltype(nullptr)> ? 777 : 888.8);
std::cout<<y<<std::endl;
}
以上两个选项都给了我error: expected primary-expression before ‘constexpr’
(gcc-11.2.0;用g++ -std=c++17
编译)。
非常感谢您的帮助!
虽然我在编程时提供了一种解决方案,但我建议其他解决方案:
制作你的consteval tenary函数模板,因为它可以处理其中的不同类型。
template<bool T,auto A, auto B>
consteval auto tenary() {
if constexpr (T) {
return A;
}
else {
return B;
}
}
#include <iostream>
#include <type_traits>
int main(void)
{
const auto y = tenary<std::is_null_pointer_v<decltype(nullptr)>,777,888.8>();
std::cout << y << std::endl;
}
请帮我弄清楚 C++ 中编译时三元条件的语法:
#include <iostream>
#include <type_traits>
int main(void)
{
//const auto y = constexpr(std::is_null_pointer_v<decltype(nullptr)>) ? 777 : 888.8;
const auto y = constexpr(std::is_null_pointer_v<decltype(nullptr)> ? 777 : 888.8);
std::cout<<y<<std::endl;
}
以上两个选项都给了我error: expected primary-expression before ‘constexpr’
(gcc-11.2.0;用g++ -std=c++17
编译)。
非常感谢您的帮助!
虽然我在编程时提供了一种解决方案,但我建议其他解决方案: 制作你的consteval tenary函数模板,因为它可以处理其中的不同类型。
template<bool T,auto A, auto B>
consteval auto tenary() {
if constexpr (T) {
return A;
}
else {
return B;
}
}
#include <iostream>
#include <type_traits>
int main(void)
{
const auto y = tenary<std::is_null_pointer_v<decltype(nullptr)>,777,888.8>();
std::cout << y << std::endl;
}