Skip to main content
ProductsDesktop toolsTASTECADDrawing reviewTASTEFILESFile managementTASTEFTPFile transferTASTESSHRemote workspaceTASTEZIPCompression and extractionDeveloper toolsTASTECODERust integrated development environmentTASTESTUDIOIntegrated development and test environmentTASTEETLData integration (ETL)ServersTASTEREMOTERemote desktop serverTASTEGEOGeospatial serverTASTEMAILMail workspaceGet startedDownloadsDocumentationBuyAll products
Marketplace
News
TechNewsToday's dev newsDeveloper docsProgramming languagesRustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDartWeb front-end frameworksNext.jsReactVue.js · NuxtSvelteKitAngularServer frameworksSpring BootDjangoFastAPIASP.NET CoreNestJS · ExpressApp & desktop frameworksTauriFlutterReact NativeElectronAlgorithmsAlgorithm basicsCore algorithmsAdvanced algorithmsPractical algorithms
CommunityProjectsDevelopment logsPromptsAI tool issuesShowcaseCommunity guide
Work with usTech transferWebsite buildDesktop app buildRelease and payment pipelineSales partnerContact
ServicesRemote desktopCustom installer packages
TASTEDEV
Products

Desktop tools

TASTECADComplex drawings, opened with easeTASTEFILESJust the files you need, as fast as possibleTASTEFTPThe tidiest path for your filesTASTESSHA stronger link between you and your serversTASTEZIPPack faster, unpack safer

Developer tools

TASTECODEEdit, build, debug and test Rust apps in one windowTASTESTUDIOFrom editing to remote tests and approved AI fixesTASTEETLMove data while you watch the values

Servers

TASTEREMOTEA remote desktop you run on your own serverTASTEGEORebuilding a GeoServer-compatible geospatial server in RustTASTEMAILTake back control of your email

Get started

DownloadsLatest builds of every productDocsHow to use each productBuySubscriptions and perpetual licencesAll productsEvery product at a glance
All products
MarketplaceNews
Tech

News

Today's dev newsOfficial announcements on languages, frameworks, GitHub and AIDeveloper docsGuides to languages, frameworks and algorithms

Programming languages

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

Frameworks

Web front-end frameworksNext.jsReactVue.js · NuxtSvelteKitAngular
Server frameworksSpring BootDjangoFastAPIASP.NET CoreNestJS · Express
App & desktop frameworksTauriFlutterReact NativeElectron

Algorithms

Algorithm basicsComplexity analysis · Sorting · Searching · Basic data structures · Trees and heapsCore algorithmsGraph traversal · Shortest paths & minimum spanning trees · Dynamic programming · Greedy algorithms · Divide and conquer · BacktrackingAdvanced algorithmsString algorithms · Math and number theory · Bit manipulation · Segment trees · Union-findPractical algorithmsCoding interview strategy · LRU cache · Rate limiting · Consistent hashing
All development docs
Community
ProjectsDiscover builders and their workDevelopment logsDecisions and lessons learnedPromptsReusable instructionsAI tool issuesProblems and workarounds for Claude, Codex, GeminiShowcaseFinished resultsCommunity guideHow we build in the open
Work with us
Tech transferNative apps in Rust and eguiWebsite build10 languages, accounts, docs and downloadsDesktop app buildRust and egui, no WebViewRelease and payment pipelineSigning, MSI, deb, rpm, AppImage, hashesSales partnerRecommend us and earn 30%ContactBuilds, partnerships and investment
Services
Remote desktopReach your computer from a browserCustom installer packagesOnly the features you need, settings preloaded
Buy
EN
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
Log in
Log in
TASTEDEV

From small tools to better development.

support@tastedev.netSupport TASTEDEV
ProductsProduct lineupBuyDocsDownloadsMarketplaceSupport
CommunityProjectsDevelopment logsPromptsAI tool issuesShowcase
PoliciesPrivacy policyTerms of serviceSubscription termsRefund policyCommunity guidelines
AccountLog inSign up
Visitors
Today
012345678901234567890123456789012345678901234567890123456789
Yesterday
012345678901234567890123456789012345678901234567890123456789
Total views
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
Company
GXSOFT
Representative
CHOI YOUNG GU
Business registration number
853-44-00368
Address
9F V24, 351 Gyeongin-ro, Michuhol-gu, Incheon, Republic of Korea
Phone
+82-10-4404-1523
Email
whitecalvin@tastedev.net
Privacy officer
CHOI YOUNG GU

© 2026 TASTEDEVProduct information is based on verified development sources.Released · improving

C++ docs
C++
Getting StartedSyntax BasicsTypes and DataModules and PackagesErrors and TestingKey Concepts
Discussions

C++ guide · 3/6

Types and Data

C++ is statically typed: the type of every value is fixed at compile time. The compiler uses that knowledge both to catch mistakes and to generate fast code. This chapter tours the fundamental types, strings, the most common standard containers, and the ways you define your own types with classes, structs and scoped enums.

Fundamental types

TypeWhat it holdsExample
booltrue or falsetrue, false
chara single byte-sized character'A'
intsigned integer, commonly 32 bits42
long longinteger of at least 64 bits9'000'000'000LL
doubledouble-precision floating point3.14
std::size_tunsigned type for sizes and indiceswhat v.size() returns

The standard only puts lower bounds on the size of int. When the exact width matters, use the fixed-width aliases from <cstdint> such as std::int32_t or std::uint64_t. The apostrophes inside a number are digit separators, available since C++14.

std::string

Prefer std::string from <string> over raw character arrays. It manages its own memory and knows its length.

#include <iostream>
#include <string>

int main() {
    std::string s{"Hello"};
    s += ", world";                       // append
    std::cout << s.size() << '\n';        // 12
    std::cout << s.substr(0, 5) << '\n';  // "Hello"

    if (auto pos = s.find("world"); pos != std::string::npos) {
        std::cout << "found at " << pos << '\n';
    }
    int n = std::stoi("123");              // string to int
    std::string t = std::to_string(n + 1); // int to string
}

For read-only string parameters, take const std::string& or, since C++17, std::string_view. A string_view does not own its characters; it just points at someone else's, so it must never outlive the string it refers to.

Standard containers

ContainerWhen to use it
std::vector<T>Growable contiguous array. Your default choice
std::array<T, N>Fixed-size array with the size known at compile time
std::map<K, V>Associative container kept sorted by key
std::unordered_map<K, V>Hash table, no ordering, usually faster lookups
#include <array>
#include <iostream>
#include <map>
#include <string>
#include <vector>

int main() {
    std::vector<int> nums{3, 1, 4};
    nums.push_back(1);
    std::cout << nums.size() << ' ' << nums[0] << '\n'; // 4 3

    std::array<double, 3> point{1.0, 2.0, 3.0};
    std::cout << point.at(2) << '\n';  // at() checks the index

    std::map<std::string, int> stock;
    stock["apple"] = 5;
    stock["banana"] = 2;
    for (const auto& [name, qty] : stock) {   // C++17 structured bindings
        std::cout << name << ": " << qty << '\n';
    }
    if (stock.contains("apple")) { /* C++20 */ }
}

operator[] on a vector does no bounds checking, and an out-of-range index is undefined behavior. Use at() or check the size when you aren't sure. Also note that operator[] on a std::map inserts a default-constructed value when the key is missing, which can surprise you during lookups.

Classes

A class bundles data (member variables) with behavior (member functions). Making the data private means only the class itself can modify it, so it can guarantee that its objects always stay in a valid state.

#include <stdexcept>
#include <string>
#include <utility>

class Account {
public:
    explicit Account(std::string owner, long long balance = 0)
        : owner_{std::move(owner)}, balance_{balance} {   // member initializer list
        if (balance_ < 0) throw std::invalid_argument("negative balance");
    }

    void deposit(long long amount) { balance_ += amount; }
    long long balance() const { return balance_; }         // const member function
    const std::string& owner() const { return owner_; }

private:
    std::string owner_;
    long long balance_;
};

// Account a{"Kim", 1000};
// a.deposit(500);   // a.balance() == 1500

Constructors initialize members through the member initializer list after the colon. explicit stops a single-argument constructor from being used for implicit conversions you didn't ask for. Member functions that don't modify the object are marked const, which lets you call them on const objects and references.

Structs and enum class

The only language difference between struct and class is the default access: members of a struct are public. By convention, struct is used for plain bundles of data with no invariants to protect. For enumerations, prefer enum class: its enumerators are scoped and don't convert silently to integers.

#include <string>

enum class Color { Red, Green, Blue };

struct Pixel {
    int x = 0;
    int y = 0;
    Color color = Color::Red;
};

std::string to_string(Color c) {
    switch (c) {
        case Color::Red:   return "red";
        case Color::Green: return "green";
        case Color::Blue:  return "blue";
    }
    return "unknown";
}

// Pixel p{10, 20, Color::Blue};          // aggregate initialization
// int raw = static_cast<int>(p.color);   // explicit when you need the number

Summary

  • Use the <cstdint> fixed-width types when integer size matters.
  • Store text in std::string; accept read-only text as const std::string& or std::string_view.
  • Reach for std::vector first, std::array for fixed sizes, and std::map or std::unordered_map for key-value data.
  • Use a class with private members for types that enforce invariants, and a struct for plain data.
  • Prefer enum class over plain enum.
Questions about this chapter?
Previous chapterSyntax BasicsNext chapterModules and Packages

0 comments

Top commentsNewest first

Sign in · Sign in to leave a comment.