C++11/14 literals:part 2

針對 C++11C++14 的 literals,前面已經寫了 part 1 來針對標準提供的 literals 做了一些說明;而接下來這篇,則是來紀錄一下如何自訂屬於自己的 literals、也就是所謂「User-defined literals」(CppReference)。

在定義 User-defined literals 的時候,能支援的格式是有限制的,包括了:

  • 整數:(unsigned long long int)
  • 浮點數:(long double)
  • 字元:(char)(wchar_t)(char16_t)(char32_t)
  • 字串:(char,size_t)(wchar_t,size_t)(char16_t,size_t)(char32_t,size_t)

如果不是這些型別的話,是不能編譯的。

閱讀更多»

C++11/14 literals:part 1

這篇基本上是 C++11C++14 針對「literal」(不確定該怎麼翻譯,Cpp Reference 翻譯成「字面量」、MSDN 則是翻譯成「常值 」)的一些新特性做介紹。

所謂的 literal 在 Heresy 來看,主要的功能就是在透過透過數字、或是字串來建立新的變數時,強制指定型別的一種方式。

之前的 C++ 標準中就已經存在了,下面就是一些例子:

auto fVal = 1.0f;     // float
auto dVal = 1.0;      // double
auto sVal = "test";   // const char*
auto wVal = L"test";  // const wchar_t*

閱讀更多»

C++14 與 C++17 Lambda Expression 的改變

在很久以前,Heresy 就曾經曾對 C++11(當時還叫做 C++0x)的新語法、Lambda Experssion 寫過簡單的介紹、《C++0x:Lambda expression》了~

由於 lambda 這種匿名函式再搭配需要使用 function object 的時候,會是一個相當方便的東西,所以 Heresy 也常常在使用。

而在 C++11 引進後,其實在後面的 C++14C++17 中,也都有針對 lambda 再做一些改進;雖然之前其實也有簡單提過,不過這邊就在整理一下,這兩次改版中,Heresy 個人覺得比較用的到的變化吧~

閱讀更多»

C++ 的一些 attribute

C++ 的 attribute(參考)是在 C++11 新加入的東西。他基本上算是在程式碼裡面,加上特別的輔助說明,給編譯器看,讓編譯器可以在編譯時針對這些屬性來做處理。

這樣的功能其實以前編譯器大多是有自己定義。像 gcc 是用 __attribute__參考)、MSVC 則是有 __declspec參考,現在則算是終於有個統一的標準了。

目前 C++ attribute 的寫法滿特別的,他是直接用兩組中括號夾住、寫成 [[…]] 這樣的形式。而到 C++20 為止,也訂了超過十個 attribute 了(到還沒定案的 C++20)(除了標準定義的部分,編譯器也還有可以有自己定義的東西);在大部分的狀況下,他們主要的功能大概就是避免編譯器產生不必要的警告、增加程式碼的可讀性,以及讓編譯器更好最佳化吧~

其中有的個人覺得還算滿有用的,所以這邊就大概紀錄一下。

閱讀更多»

C++14 編譯階段的整數序列的 integer_sequence

這篇雖然是在講 C++14 的「std::integer_sequence」(cppreference),不過實際上應該算是之前《C++11 的「…」:Parameter Pack》一文的延伸。

std::integer_sequence 是一個用來建立編譯階段(compile-time )的整數序列(不是陣列)的 template class,定義如下:

template< class T, T... Ints >
class integer_sequence;

而他是被定義在標準函式庫的 <utility> 這個標頭檔裡面,所以要使用的話,就需要引入這個檔案。

他最基本的使用方法大致上如下:

std::integer_sequence<int, 1, 3, 5, 7>()

這樣就代表了一個型別是 int 的序列、裡面有 1, 3, 5, 7 四個數值。

閱讀更多»

C++14 到 C++17 的變化

這篇是參考《Changes between C++14 and C++17 DIS》,他主要是在描述 C++14 到 C++17 的變化;雖然由於 C++17 其實還是草案,所以很多東西都還有變數。不過由於他這邊整理的滿清楚的,所以這邊就稍微紀錄一下。

這篇文章,基本上把 C++14 到 C++17 的變化,整理出幾個部分:

  1. Removed or deprecated features(移除與已棄用的功能)
  2. New core language features with global / local applicability (新的核心語言功能)
  3. New library features(新的函式庫功能)
  4. Modifications to existing features(現有功能的修改)
  5. Miscellaneous(雜項)

閱讀更多»

微軟正式推出 Visual Studio 2017

微軟又針對旗下的程式開發環境、Visual Studio 推出新版本囉~這次的版本是 Visual Studio 2017,目前也已經可以下載安裝了~它的官方網站是:

https://www.visualstudio.com/zh-hant/

而新功能的介紹,則可以參考「新功能」的頁面(連結)、或是直接看 release note 的細節(連結)。

目前的 Visual Studio 有三個版本,包括了免費的社群版(Community、官網)、一般人用的專業版(Professional、官網),以及最高階的企業版(Enterprise、官網)。

閱讀更多»

微軟 2016 程式開發相關消息

這篇算是稍微整理一下,微軟在 Build 2016 大會上(官網),一些關於程式開發的新消息。

在 Heresy 個人來看,這幾年微軟一個很大的方向,應該就是「跨平台」吧…包含前幾天的《Windows 10 將可以跑 Linux 的 Bash shell 和 Ubuntu 的程式了》,以及更早的 Visual Studio Code 在內,微軟現在似乎越來越主動走向 Linux 社群了…

而這篇的重點,則包含了新的 Visual Studio "15" 預覽版,Visual Studio 2015 Update 2,以及 Visual C++ for Linux Development、C/C++ extension for Visual Studio Code;而在 .Net 那頭,更是喊出了「開放、跨平台、免費」的口號(參考)。

閱讀更多»

AMD 放大招了…推出 Boltzmann Initiative、支援 CUDA 程式的轉移!

NVIDIA 的 CUDA 架構,基本上應該算是現階段最成功的 GPGPU 環境之一。他在新一代、專門用來做大量平行計算的環境裡面,算是推出最早的,所以相對起來、發展的也算是最完整的;而後來雖然 Khronos 有推出跨硬體平台的開放標準 OpenCL(Intel、AMD、NVIDIA 都有支援),但是就 Heresy 所知,還是有許多開發人員是偏好 CUDA 的。

而 AMD 在 GPGPU 這一塊…個人是覺得發展的始終有點悲劇吧?Heresy 有紀錄的部分,他最早是推出自家的「Stream SDK」,而之後就徹底捨棄自己的語言、完全轉投向 OpenCL、Stream SDK 也改名為「AMD APP SDK」了。

儘管 AMD 也試著在靠 OpenCL、以及後來所推出、基於 AMD APU 的「Heterogeneous System Architecture」(異質系統架構、官網)來做平行計算的發展方向(AMD 稱之為「Heterogeneous Computing」、異質計算),但是實際上…就個人所知,成效似乎不算是很好。

閱讀更多»

微軟推出 VisualStudio 2015 以及 VisualStudio 2013 Update 5

在去年年底微軟推出 Visual Studi 2015 預覽版後,在今年四月微軟又針對 VisualStudio 2015 持續改良、推出了 Visual Studio 2015 RC,而現在、正式版終於推出了!而目前也已經可以在微軟網站下載了,其網址是:

https://www.visualstudio.com/downloads/download-visual-studio-vs

目前微軟的網站提供了可以免費使用的社群版(Visual Studio Community)、以及企業版(Visual Studio Enterprise)的試用版可供下載;另外也有提供跨平台、用來進行網頁開發的 VisualStudio Code 可以下載。

閱讀更多»