-6
A
回答
1
在鏈接的評論說:「整數,指針和成員指針模板參數是不是左值」(重點煤礦)。它並不是說名稱整型變量不是左值 - 它們是。
如果有浮點模板參數這樣的事情,那麼它們也不會是左值;但名爲浮點變量仍然會。
1
這與使用int作爲模板參數是一個右值具體相關,但不能將浮點數用作模板參數。
例如。
template <int T>
struct foo
{
void f(int&);
void f(int&&);
void bar()
{
int x;
f(x); // calls first version
f(T); // calls second version, despite being "named"
}
};
template <float F> // compile error: can't use a float as a template parameter
struct bad {};
1
你是什麼意思的「命名值」? C++中沒有這樣的概念。 變量(不論其類型如何)是一個左值(當在 表達式中使用時)。在大多數情況下,引用類型的東西是 左值,除了數據類型變量以外的東西不是(但我是 肯定有人會發現一些例外);數據類型(整數 或浮點數)與它無關。
有問題的線程正在討論非類型的模板參數。上面的規則 也適用於此處:引用是左值,其他類型不是左值,其他類型是 。由於只有非常有限的非參考類型集可以用作非類型模板參數,所以似乎會出現混淆:特別是 ,整數類型是可以的,但浮點類型不是。 因此,一個模板內,一個浮點參數必須是參考(和 從而左值),積分類型可以是一個值類型(不是 左值)或基準(左值),例如:
template <int N>
struct A { /* N is not an lvalue */ };
template<int& N>
struct B { /* N is an lvalue */ };
template <double N>
struct C {}; // This is illegal, and shouldn't compile
template <double& N>
struct D { /* N is an lvalue */ };
這裏的區別不在於N
是否具有整型,它是 是否N
是一個參考與否。
相關問題
- 1. 重命名路徑名爲
- 2. 命名:createFunctionDelegate()vs createDelegateFunction()?
- 3. POSIX命名行爲
- 4. 是否可以使用一行命令將[int,bool,float]轉換爲['int','bool','float']?
- 5. 匿名函數vs命名函數哪個更好,爲什麼
- 6. df.set_index()中的Float vs Int行爲
- 7. 將float轉換爲byte []以通過命名管道(C++)發送
- 8. 命名方法:send_auto_reply()vs send_autoreply()
- 9. 命名參數:C#vs Python
- 10. 命名類像「com.facebook.FacebookClient」vs「com.facebook.Client」
- 11. 如何重命名爲命令輸出?
- 12. 錯誤重命名爲MANIFEST.MF
- 13. 變量命名爲循環
- 14. _vimrc重命名爲_vimrc.2014
- 15. ,因爲命名空間
- 16. 命令不作爲別名
- 17. C++不命名爲類型
- 18. 命名指針爲「pointerToXYZ」
- 19. InjectionFactory爲命名實例
- 20. 爲什麼命名不同?
- 21. Velocity命名參數爲宏
- 22. ImportError:No Module命名爲bs4(BeautifulSoup)
- 23. 重命名錶爲'NOW()+ old_table_name'
- 24. PHP命名爲信號量?
- 25. 列命名爲數字
- 26. Vue.js命名爲javascript鉤子
- 27. 將total.js重命名爲totaljs
- 28. 爲命名管道生成名稱
- 29. 沒有名爲命名空間「STD」 make_unique'
- 30. 重命名文件擴展名爲.txt