Впн которым лично пользуюсь
Outline Client
Кроссплатформенный VPN- или прокси-клиент для Windows, macOS, iOS, Android и ChromeOS. Outline Client предназначен для использования с программным обеспечением Outline Server, но он полностью совместим с любым сервером Shadowsocks.
Языки: #TypeScript 29.3%, #JS 20.1%, #Cpp 11.1%, #Swift 9.9%, #Java 8.9%, #Csharp 6.9%
https://github.com/Jigsaw-Code/outline-client
Outline Client
Кроссплатформенный VPN- или прокси-клиент для Windows, macOS, iOS, Android и ChromeOS. Outline Client предназначен для использования с программным обеспечением Outline Server, но он полностью совместим с любым сервером Shadowsocks.
Языки: #TypeScript 29.3%, #JS 20.1%, #Cpp 11.1%, #Swift 9.9%, #Java 8.9%, #Csharp 6.9%
https://github.com/Jigsaw-Code/outline-client
Что такое ссылка (reference)
Во первых в отличии от указателя ссылка это не объект , это всего лишь альтернативное имя для объекта.
Ссылка всегда должна быть инициализирована (ПРИМ1), так как она связана всего лишь с одним объектом за все свое существование.Когда мы объявляем ссылку вместо того чтобы копировать значение мы связываем ссылку с его инициализатором.
Пример:
referenceValue имеет все свойства переменной value, может изменять ее значение так как являеться псевдонимом value.
Но есть ограничение, нельзя создавать массив ссылок(не ссылку на масив).Но можно сделать референс на массив(нужно знать размер массива на который будем ссылаться)
Пример:
Из хабра:
В C++ к массивом применяется правило, называемое сведением (decay, array-to-pointer decay). (Для перевода термина «decay» еще используется слово «низведение», также можно встретить «разложение».) Суть сведения заключается в том, что почти в любом контексте идентификатор массива преобразуется к указателю на первый элемент и информация о размере теряется. Сведение происходит и при использовании массивов в качестве параметров функций.
Функция не может возвращать массив, а вот ссылку на массив может. Без использования псевдонимов объявление такой функции выглядит несколько пугающе:
Также можно использовать ссылки для аргументов и возращения значение в функциях,в качестве члена класса,для итерации по контейнерам в for(range-based loop) и не только.
(ПРИМ1): Только если ссылка помечена как extern (она обьявлена в другом файле) то ее можно (нужно) не инициализировать.
Если будет много реакций сделаю пост про иное использование ссылок ( + что такое rvalue & lvalue reference)
#cpp #lvalue
Во первых в отличии от указателя ссылка это не объект , это всего лишь альтернативное имя для объекта.
Ссылка всегда должна быть инициализирована (ПРИМ1), так как она связана всего лишь с одним объектом за все свое существование.Когда мы объявляем ссылку вместо того чтобы копировать значение мы связываем ссылку с его инициализатором.
Пример:
int value = 256;
int& referenceValue = value; //referenceValue теперь связан с value (псевдоним value)
referenceValue имеет все свойства переменной value, может изменять ее значение так как являеться псевдонимом value.
Но есть ограничение, нельзя создавать массив ссылок(не ссылку на масив).Но можно сделать референс на массив(нужно знать размер массива на который будем ссылаться)
Пример:
int main(){
int arr[10]{};
int (&r)[10]{arr};
r[2] = 12;
std::cout<<arr[2]<<std::endl; //В консоле будет число 12
}
Из хабра:
В C++ к массивом применяется правило, называемое сведением (decay, array-to-pointer decay). (Для перевода термина «decay» еще используется слово «низведение», также можно встретить «разложение».) Суть сведения заключается в том, что почти в любом контексте идентификатор массива преобразуется к указателю на первый элемент и информация о размере теряется. Сведение происходит и при использовании массивов в качестве параметров функций.
void Foo(int a[4]);
void Foo(int a[]);
void Foo(int *a);
Функция не может возвращать массив, а вот ссылку на массив может. Без использования псевдонимов объявление такой функции выглядит несколько пугающе:
int(&Foo(int x))[4];
Также можно использовать ссылки для аргументов и возращения значение в функциях,в качестве члена класса,для итерации по контейнерам в for(range-based loop) и не только.
(ПРИМ1): Только если ссылка помечена как extern (она обьявлена в другом файле) то ее можно (нужно) не инициализировать.
Если будет много реакций сделаю пост про иное использование ссылок ( + что такое rvalue & lvalue reference)
#cpp #lvalue
Хабр
Ссылки и ссылочные типы в C++
Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Это пятая статья из серии, список предыдущих статей...
#include <iostream>
class A{
public:
A(){std::cout<<"A";}
};
class B{
public:
B(){std::cout<<"B";}
};
class C{
private:
B b;
A a;
public:
C() : a(),b(){ }
};
int main(){
C c;
}
#Cpp