簡體   English   中英

static常量成員變量與C++中收縮轉換的關系

[英]Relation between static constant member variables and narrowing conversions in C++

使用 GCC 編譯器在 C++20 中編碼。

根據下面顯示的代碼,由於intchar的隱式轉換,程序將引發縮小轉換錯誤/警告。 但是,如果我將static const/constexpr添加到int var {92}; 行,程序運行時不會引發任何錯誤/警告。

  1. 為什么會這樣?
  2. 什么時候應該使用static const/constexpr成員變量?
  3. 為什么不允許使用constexpr成員變量?
#include <iostream>

class Foo {
    private:
        int var {92};
    public:
        void bar() {
            char chr {var};
            std::cout << chr << '\n';
        }
};

int main() {
    Foo foo;
    foo.bar();
} 

為什么會這樣?

因為 列表初始化(C++11 起) 禁止縮小轉換

(強調我的)

  • 從 integer 或無作用域枚舉類型到 integer 類型的轉換不能表示原始的所有值,除非源是一個常量表達式,其值可以准確地存儲在目標類型中

如果您將var聲明為static const/constexpr ,它變成一個常量表達式並且值92可以存儲在char中,那么代碼可以正常工作。

暫無
暫無

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

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