gpt4 book ai didi

c++ - 为什么主表达式不包含 template_id

转载 作者:太空狗 更新时间:2023-10-29 20:25:15 24 4
gpt4 key购买 nike

我有这样的代码,用“g++ -Wall -g -std=c++11 test.cpp ”编译,它没有编译,因为错误:')' 标记之前的预期主表达式

#include <functional>
#include <vector>
#include <algorithm>

int main()
{
std::vector<int> vec;
for(int i=0;i<10;++i)
{
vec.push_back(i);
}
std::sort(vec.begin(),vec.end(),std::less<int>); //should be std::less<int>()
}

但是标准说:

primary-expression:
literal
this
( expression )
id-expression
lambda-expression

id-expression:
unqualified-id
qualified-id

unqualified-id:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~ class-name
~ decltype-specifier
template-id

template-id
simple-template-id

simple-template-id
template-name <template-argument-list>

所以看起来 std::less 是一个模板 ID,所以它是一个主表达式。

最佳答案

语法正确并不一定使程序语义正确。来自 primary-expression -> template-id 的语法产生式允许使用函数模板的特化作为表达式,例如,这是有效的:

template <typename T>
bool less(const T& a, const T& b) { return a < b; }

int main() {
std::vector<int> vec;
std::sort(vec.begin(), vec.end(), less<int>);
}

但是,引用类模板的模板 ID 不能用作表达式。

关于c++ - 为什么主表达式不包含 template_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435954/

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