簡體   English   中英

兩個指針的區別是合法的c ++ 17常量表達式嗎?

[英]Is difference between two pointers legal c++17 constant expression?

根據cppreference部分核心常量表達式指出19)兩個指針之間的減法運算符不是合法的常量表達式, 直到c ++ 14 我可以假設以下代碼是合法的c ++ 17代碼或者這種解釋是濫用嗎?

int X, Y;

template <long long V>
struct S { };

int main() {
    S<&X - &Y> s;
    (void)s;
}

這個問題沒有實際意義。 指針算術只在屬於同一個數組的指針上定義,當然不是那種情況。 所以,上面的代碼不是合法的C ++,實際上,無法使用我可用的編譯器進行編譯。

引用的cppref 文章

核心常量表達式是任何不具有以下任何一個的表達式。

7)一個表達式,其評估導致任何形式的核心語言(自C ++ 17以來)未定義的行為(包括有符號整數溢出,除零, 指針算法在數組綁定 s 之外等)。 是否未指定檢測到標准庫未定義行為。 (自C ++ 17起)

19)兩個指針之間的減法運算符(直到C ++ 14)

可能只有陣列邊界內的數組ptr arithemtics從c ++ 14開始變得“​​合法化”,而不是所有的指針算術


實際上一個演示顯示,即使使用c ++ 11(不是c ++ 98),數組ptr算法也能正常編譯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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