C++11 “函数的返回”;如果constexpr";及;否则,如果constexpr“; 我是C++初学者。 有人能解释一下编译过程函数后的输出吗。 非常感谢 template <typename T> auto process(T arg) { // 4. With constexpr if, to enable the compiler to generate different code based on the type the template is instantiated with: if constexpr (std::is_same<T, bool>::value) return !arg; else if constexpr (std::is_integral<T>::value) return -arg; else if constexpr (std::is_floating_point<T>::value) return std::abs(arg); else return arg; } int main(){ ... { auto v1 = process(false); // true auto v2 = process(42); // -42 auto v3 = process(-42.0); // 42.0 auto v4 = process("42"s); // "42" } ... return 0; } 模板 自动处理(T参数) { //4.使用constexpr if,使编译器能够根据模板实例化的类型生成不同的代码: 如果constexpr(std::is_same::value) 返回!arg; 否则如果constexpr(std::is_integral::value) 返回-arg; 如果constexpr(std::is_floating_point::value) 返回标准::abs(arg); 其他的 返回arg; } int main(){ ... { 自动v1=进程(假);//真 自动v2=进程(42);//-42 自动v3=进程(-42.0);//42.0 自动v4=进程(“42”s);/“42” } ... 返回0; }

C++11 “函数的返回”;如果constexpr";及;否则,如果constexpr“; 我是C++初学者。 有人能解释一下编译过程函数后的输出吗。 非常感谢 template <typename T> auto process(T arg) { // 4. With constexpr if, to enable the compiler to generate different code based on the type the template is instantiated with: if constexpr (std::is_same<T, bool>::value) return !arg; else if constexpr (std::is_integral<T>::value) return -arg; else if constexpr (std::is_floating_point<T>::value) return std::abs(arg); else return arg; } int main(){ ... { auto v1 = process(false); // true auto v2 = process(42); // -42 auto v3 = process(-42.0); // 42.0 auto v4 = process("42"s); // "42" } ... return 0; } 模板 自动处理(T参数) { //4.使用constexpr if,使编译器能够根据模板实例化的类型生成不同的代码: 如果constexpr(std::is_same::value) 返回!arg; 否则如果constexpr(std::is_integral::value) 返回-arg; 如果constexpr(std::is_floating_point::value) 返回标准::abs(arg); 其他的 返回arg; } int main(){ ... { 自动v1=进程(假);//真 自动v2=进程(42);//-42 自动v3=进程(-42.0);//42.0 自动v4=进程(“42”s);/“42” } ... 返回0; },c++11,c++17,C++11,C++17,process()的真正代码编译器是在我们在主函数中调用上述代码后生成的 process()的真正代码编译器是在我们在主函数中调用上述代码后生成的 process()不是一个函数,也没有生成它的编译版本(至少在典型的实现中);相反,您的程序生成四个独立的函数,即process、process、process和process,每个函数都有自己的编译版本 p>这不是具体的,如果是CopExPR < /C> >这只是模板在C++中的工作原理。 那些编译后的版本可以完全省略不适用于类型参数的if语句的

process()的真正代码编译器是在我们在主函数中调用上述代码后生成的

process()的真正代码编译器是在我们在主函数中调用上述代码后生成的

process()
不是一个函数,也没有生成它的编译版本(至少在典型的实现中);相反,您的程序生成四个独立的函数,即
process
process
process
process
,每个函数都有自己的编译版本

<> p>这不是具体的<代码>,如果是CopExPR < /C> >这只是模板在C++中的工作原理。

那些编译后的版本可以完全省略不适用于类型参数的
if
语句的分支;例如,
过程
的定义如下:

模板
布尔过程(布尔参数)
{
返回!arg;
}
process()的真正代码编译器是在我们在主函数中调用上述代码后生成的

process()
不是一个函数,也没有生成它的编译版本(至少在典型的实现中);相反,您的程序生成四个独立的函数,即
process
process
process
process
,每个函数都有自己的编译版本

<> p>这不是具体的<代码>,如果是CopExPR < /C> >这只是模板在C++中的工作原理。

那些编译后的版本可以完全省略不适用于类型参数的
if
语句的分支;例如,
过程
的定义如下:

模板
布尔过程(布尔参数)
{
返回!arg;
}