1. 程式人生 > >C++類作用域的問題,在類定義中宣告常量與使用的問題

C++類作用域的問題,在類定義中宣告常量與使用的問題

class Stock
{
private:
	std::string company;
	const int Month = 12; 
	double costs[Month]; //報錯
	long cost = Month; //正確
...
};

上面是程式碼,下面是VS2017的報錯,C++ Primer Plus對這個問題的解釋沒有看太懂。書上的原話是“在建立物件前,將沒有用於儲存值的空間。”

由於目前知識有限,我的理解是認為問題是因為編譯器在編譯該類時並沒有建立物件例項,因此Month的值相當於是未知(不知道實際情況是不是這樣),所以在此處報錯;而下面一行沒有報錯,我的理解是cost=Month=12,這是合理的(還是不知道實際情況是否如此)。

相關推薦

C++作用的問題定義宣告常量使用的問題

class Stock { private: std::string company; const int Month = 12; double costs[Month]; //報錯 long cost = Month; //正確 ... }; 上面是程式碼,

C++ 物件定義作用成員this指標

概要 這篇文章主要內容是關於類與物件,類的定義,類的作用域,類中成員,this指標。寫的比較粗,後期有時間再改。 什麼是類? 對於類,我認為最早的發言人還是亞里士多德。他歸納事物的方法就是這是什麼(屬性)、能幹什麼(方式)、 起個名字(物件名) 、歸類(抽象)

C++變數作用儲存區

在C++中,儲存區域可以分為:堆,棧,常數區,靜態區,程式碼區; 堆: 棧:區域性變數(定義它的函式內有效) 常數區: 靜態區:全域性變數(整個程式檔案中有效),靜態全域性變數(定義它的檔案中有效),靜態區域性變數(定義它的函式內有效,整個程式檔案存在) 程式碼區: &nbs

C變數作用生存期連結特性

變數的作用域 C語言中變數的作用域(Scope)有以下幾種: 塊作用域(block scope) 函式作用域(function scope) 函式原型作用域(function prototype scope) 檔案作用域(file scope) 塊作用域 定義在{}內的變數以及函

變數型別(接C變數作用生存期連結特性)

自動變數 自動儲存型別,特點:自動儲存期,塊作用域,無連結。預設情況下,在塊級作用域中或函式頭中的變數屬於自動儲存型別的變數。當然,也可以受用關鍵字"auto"特別宣告,一般用處不大。 示例: // hiding.c -- variables in blocks #include<stdio.h&g

OOP3(繼承作用/構造函數拷貝控制/繼承容器)

-a 控制 拷貝控制 函數調用 iostream 分配 類繼承 導致 每一個 當存在繼承關系時,派生類的作用域嵌套在其基類的作用域之內。如果一個名字在派生類的作用域內無法正確解析,則編譯器將繼續在外層的基類作用域中尋找該名字的定義 在編譯時進行名字查找: 一個對象、引用

C語言的生命週期作用預設值記憶體區域連結屬性

1、全域性變數:定義在函式外部的變數 生命週期:從程式執行開始建立,程式退出銷燬; 作用域:從定義該變數開始一直到檔案的結束; 預設值:0; 記憶體區域:全域性(靜態)變數區; 連結屬性:外部(可以在其他檔案中引用)。 注意:全域性變數只需在一個原始檔中定義,就可以作用

--其他特性作用建構函式靜態成員

一、類的其他特性 1、類成員再探 1)定義一個型別成員   除了定義資料和函式成員之外,類還可以自定義某種型別在類中的別名。由類定義的型別名字和其他成員一樣存在訪問限制,可以是public或者private中的一種。用來定義類型別名的成員必須先定義後使用,因此,型別成員通常出現在類開始的地方。

Java 和物件如何定義Java如何使用Java的物件,變數

1.物件的概念 :萬物皆物件,客觀存在的事物皆為物件 2.什麼是面向物件:人關注一個物件,實際上是關注該物件的事務資訊 3.類:類是模子,確定物件將會擁有的特徵(屬性)和行為(方法)        

java 區域性變數變數例項變數的作用生命週期

1,區域性變數 區域性變數是指定義在方法或程式碼塊中的變數,區域性變數必須初始化,在方法或程式碼塊內有效,之外則無效,方法執行開始入棧時建立,執行完畢出棧時銷燬。 2,例項變數 其作用域受限定符限定,Private的只能在本類中使用,protected子類可用,publi

HTML的函式使用基礎(函式定義函式呼叫函式引數函式返回值巢狀函式遞迴函式變數作用內建函式其他定義函式的方法)

HTML中的函式使用基礎 函式實質上是一個類似於單獨的邏輯單元的JavaScript程式碼,使用函式可以使程式碼更為簡潔,提供重用性,在JavaScript中,大約有95以上的程式碼是包含在函式中的,由此可見,函式在JavaScript中地位相當重要。 1、函式定義 在

C 兩個連結串列資料節點的資料為一個字母 其中L1包含L2在L1找出L2相等的字串並將其逆置

前面相關操作在這呢,這個函式依託於此 //結構體 typedef struct Node { ElementType data; struct Node * next; } LNode, * LinkNode; //兩個連結串列中資料節點的資料域為一個字母 http

JS的塊級作用var、let、const三者的區別

brush 語句 nbsp light 可見 undefine 函數 true 正常 1. 塊作用域{ } <script type="text/javascript"> { var a = 1; console.log

嵌入式C語言之深度解讀C語言的儲存作用生命週期連結屬性

***儲存類:    就是儲存型別,描述,C語言變數的儲存地址。    記憶體的管理方式:棧  堆  資料段  bss段  .text段。    一個變數的儲存型別就是描述這個變數儲存在何種記憶體段之

Python的變數作用LEGB規則和閉包原理

問題來源   最近看到了一個python程式題,就三行程式碼,卻思考了很久才考慮明白,決定分享一下。 def num(): return [lambda x:i*x for i in range(4)] print([m(2) for m in num()]) 預計結果為:0, 2

jsp的四個作用九個內建物件分別是什麼?

九大內建物件: 內建物件(又叫隱含物件),就是在jsp中,不需要建立(由伺服器<容器>來建立),可以直接使用的物件。 物件 含義 類 作用域 request 請求物件 型別

javascript--函式基礎(函式的定義/作用回撥函式,即時函式內部(私有)函式返回函式的函式重寫自己的函式)

函式源於數學對映運算,它定義了一種關係,這種關係使一個集合裡的每一個元素對應到另一個(可能相同的)集合裡的唯一元素 javascript中: 函式是程式碼塊,一段被封閉嚴實的程式碼塊 函式是資料:使用者可以把函式作為 值 賦值給 變數 函式是一種物件,它是一類抽象類(建構函式),所有

面試題6.jsp的四個作用九個內建物件分別是什麼?

四個作用域 pageContext, request, session、application 1. 輸出輸入物件:request物件、response物件、out物件 2. 通訊控制物件:pageContext物件、session物件、application物件 3

884. Uncommon Words from Two Sentences 用collections模組裡的Counter物件計數返回字典的key

We are given two sentences A and B.  (A sentence is a string of space separated words.  Each wordconsists on

初入職常見問題:忽略區域性變數的作用在if語句宣告的區域性變數只在{}內有效

在做儲存服務StoreProxy專案時,因為把位置(A)處的程式碼放到了位置(B),導致儲存的圖片資料有誤,原因是忽略叻區域性變數的作用域,在if語句中宣告的區域性變數res只在{}內有效。 函式xxxxx(xxx,xxxx) {     (A)CHttpCurl