簡體   English   中英

使用額外括號時“錯誤:預期表達式”

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM