C 中指向類成員指標的賦值副本用做模板引數為什麼不行?

時間 2021-06-06 19:26:28

1樓:

因為這是語法。

在C++11,只允許乙個指向成員的表示式(constexpr)作為模板引數,也就是&AA::i ,而不允許使用 pi.

同時,正在擬定的新標準的草稿中對這個語法做出了改變。現在模板引數只需要乙個已經轉換成constant expression 的型別。所以在正在擬定的新標準中,題主的寫法是可以通過編譯的。

reference:

c++ - Why can't I use a constexpr pointer as template parameter in C++11?

2樓:徐辰

想想就知道了啊,你AA裡有乙個成員的指標型別是int *,但你怎麼可能從型別int *反推出AA呢?萬一我有另外乙個BB類裡面也有乙個int成員你說到底是推導出AA還是BB?

3樓:陳聰寧

C++規定非型別引數必須是具有外部鏈結符號的編譯期常量表示式,你沒法宣告乙個滿足條件的 pi 指標。

參考:c++無型別引數模板(non-type template parameter) 與無具名空間 static

//fun2error c2971

//fun2error c2971

//fun2error c2970

//fun2error c2970

4樓:

現行標準(C++11 N3242)只允許成員變數表示式,沒有提到等效的常量表示式。

去年的乙個提案(N4198)對其表述有改動,最早也要C++17吧。

c 中指標的值是它所指向的位址嗎,還有指標和首位址有什麼關係,為什麼要宣告指標型別?

Alpha 指標的值是它所指向的位址嗎?是的,嚴格說是虛擬記憶體位址 區別於實體地址 指標和首位址有什麼關係?為什麼要宣告指標型別?只有指定了型別,指標在做定址操作 p 的時候才能後確定從首位址 指標值 開始取多少個位元組 由型別確定 的內容 以及做算術運算 僅加減法 的時候,才能確定首位址 指標值...

c語言中指標指向的非指標變數不能使用 或 嗎

大灰灰老師 學術概念上不太正確 關於 unary 的定義 但實際上是對的解釋 C語言中,所有 unary operator 單目運算子,優先順序都是有著 left to right associativity 的比 right to left 的高,即放在被操作量右邊的先算。例如 p 先算右邊的 s...

是否可以在成員類中定義 指向父類的指標 ?

張翼德 這要分class B的宣告 h 和實現 cpp 檔案兩個地方 如果你在class B的宣告 h 裡沒有用到任何class A 的成員,比如就像你問題裡寫的那樣,只是用到了class A的名字,那你只要在class B前面宣告 class A 讓compiler知道 A是個class 就行了,...