除CUDA外,C++(含各版本草案)是否允许使用三重尖括号<<<与>>>?
关于CUDA<<<>>>语法在标准C++中的合法性判断
- 在任何标准C版本(含草案)中,引号外出现的
<<<均属于非法语法,标准C并未定义该语法结构。 - 标准C++里,
<的合法使用场景仅包括:作为小于运算符、模板参数列表的起始标记;<<则是左移运算符或流插入运算符,不存在连续三个<组成<<<的合法用法。 - 对于
>>>,C++11及之后允许模板参数闭合时的>>(如std::vector<std::vector<int>>),但>>>仅能是连续右移运算符的链式使用(如a >> b >> c),或三重嵌套模板的闭合标记(如std::vector<std::vector<std::vector<int>>>),但这类场景下对应的起始标记是单个<,而非<<<。
综上,源代码中引号外出现<<<,可以作为判断该代码为CUDA代码或存在语法错误的可靠依据——因为除了nvcc为CUDA扩展的核函数调用语法(如kernel<<<gridDim, blockDim>>>(params);)外,标准C++中不存在<<<的合法用法。
内容的提问来源于stack exchange,提问作者Jim Pivarski
相关产品推荐
相关产品推荐

