gpt4 book ai didi

c++ - 使用额外括号时为 "error: expected expression"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:21 25 4
gpt4 key购买 nike

我只是偶然发现了一个我没有预料到的编译器错误:

std::cout << sizeof(int)   << std::endl;  // ---> this is valid (obviously)
std::cout << sizeof((int)) << std::endl; // ---> this leads to
// "error: expected expression"

类似地,我们有:

template <typename T>
struct Foo
{
T value;
};
Foo<int> f1; // ---> this is valid (obviously)
Foo<(int)> f2; // ---> this leads to "error: expected expression"

显然,编译器将 (T) 解释为显式转换并停在那里。我理解错误,我理解编译器的期望,但我不明白为什么 (T) 不能被视为 T 如果它不在上下文中(T)(exp)。我认为编译器能够看穿它(并可能返回警告),所以我想这意味着在某些情况下允许这些额外的括号会导致错误。

我的问题是:什么时候会有危险?这是 C++ 标准吗?

这是用 clang 3.3 测试的。和 g++ 4.7.2。

最佳答案

sizeof 需要一个(一个表达式)或一个类型。 (int) 都不是其中之一 - 你不能将类型视为值并期望它们在你希望值这样做的情况下正确运行,因为它们不是(一流的)值。因此,您不能只用括号括起一个类型就可以得到相同的类型。

关于c++ - 使用额外括号时为 "error: expected expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17268305/

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