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 就行了,...