Closed rightrightright closed 8 months ago
首先很感谢您的提醒,这的确需要修改,写的时候没注意。 其次,您的链接是错误的,无法打开。
首先很感谢您的提醒,这的确需要修改,写的时候没注意。 其次,您的链接是错误的,无法打开。
我还是喜欢“你链接错了,无法访问”
首先很感谢您的提醒,这的确需要修改,写的时候没注意。 其次,您的链接是错误的,无法打开。
constexpr修饰在模板,特化的没有constexpr,所以没特化的能constexpr,特化的不能constexpr
另外,其实注释的错误不单单是一个 f
的问题。
Error! 函数模板 f 所实例化的所有函数都不可编译期求值,它们都不以 constexpr 修饰
这段注释本身不对,如果函数模板 g
我们没有使用 g<int>
,自然可以编译期求值:https://godbolt.org/z/1Prqr8Woj
template<class T>
constexpr T g(T) { return 6; } // 这里声明的 constexpr 修饰函数模板是无效的
template<>
int g<int>(int) { return 6; } // OK,g<int> 不是以 constexpr 修饰的
int main(){
//constexpr auto n3 = g<int>(0); // Error! 函数模板 g<int> 不是以 constexpr 修饰的
constexpr auto n3 = g<double>(0); // OK 函数模板 g<double> 自然没问题
}
首先很感谢您的提醒,这的确需要修改,写的时候没注意。 其次,您的链接是错误的,无法打开。
constexpr修饰在模板,特化的没有constexpr,所以没特化的能constexpr,特化的不能constexpr
我已经注意到,并且我重新观看了一下视频,似乎在我录制视频的时候我根本没看教案,是自己写的,倒是没说出什么问题。
视频中我提到了一句话:
以我们特化为准
倒也没问题。
https://github.com/Mq-b/Modern-Cpp-templates-tutorial/blob/main/md/%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86-%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/04%E6%A8%A1%E6%9D%BF%E5%85%A8%E7%89%B9%E5%8C%96.md
见细节部分的第三个代码块
//constexpr auto n3 = g<int>(0); // Error! 函数模板 f 所实例化的所有函数都不可编译期求值,它们都不以 constexpr 修饰
注释中的
f
应该为g
非常抱歉,由于我的疏忽留下了错误的链接地址,现已修正到正确的地址