gpt4 book ai didi

c++ - 在 C++ 模板中使用尖括号会带来哪些语法问题?

转载 作者:IT老高 更新时间:2023-10-28 12:46:34 27 4
gpt4 key购买 nike

在 C++ 中,模板使用尖括号 vector<int> 进行实例化Java 和 C# 语言对其泛型采用了相同的语法。

然而,D 的创造者对尖括号带来的问题直言不讳,他们提出了一种新的语法 foo!(int) ——但我从来没有看到太多关于尖括号会带来什么问题的细节。

其中一个是在用另一个模板实例化模板时 vector<vector<int>> ,这会导致一些(旧的?)编译器将尾随的“>>”与位移或流操作符混淆。解决方案是在两个尖括号之间插入一个空格,但现在编译器还不能解析这种语法吗?

另一个问题是在使用大于运算符 foo<3 > 2> 时。 .解析器会认为操作符实际上关闭了模板实例化;解决方法是引入括号 foo<(3 > 2)> .但我不认为在很多情况下你需要这样做,无论如何,我宁愿在需要时输入额外的括号,而不是引入新的语法和总是 必须输入感叹号。

尖括号还有哪些其他问题导致 D 开发人员创建了新语法?

最佳答案

就个人而言,我见过的最可怕的问题是在依赖上下文中调用模板函数:

template <typename T>
void foo(T t) {
t.bar<3>();
}

这看起来很简单,但实际上是不正确的。 C++ 标准要求引入 template消除歧义的关键字t.bar < 3 vs 方法调用产生:

t.template bar<3>(); // iirk

litb 就编译器可能提出的可能解释发表了一些非常有趣的帖子。

关于>>问题,它已在 C++0x 中修复,但需要更聪明的编译器。

关于c++ - 在 C++ 模板中使用尖括号会带来哪些语法问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7304699/

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