[英]“error: expected expression” when using extra parentheses
我偶然發現了一個我沒想到的編譯器錯誤:
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)
既不是其中之一 - 你不能將類型視為值,並期望它們在你期望值這樣做的情況下正確行動,因為它們不是(一等)值。 因此,您不能只是將類型括起來並使類型相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.