Точка с запятой после фигурных скобок объявления класса

У меня недавно была та же проблема для Android 9, но мне пришлось использовать несколько URL для разных экранов. Поэтому я добавил android: usedCleartextTraffic = "true" в Manifest, и это сработало, но мы не хотели ставить под угрозу безопасность всего приложения. Таким образом, исправление было в изменении ссылок с HTTP на https. Но если вам приходилось использовать только http для связи с вашим приложением, то вот ваше решение.

Use in Manifest application tag

android:networkSecurityConfig="@xml/security_config"

И создайте XML-файл, подобный этому.

<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
<debug-overrides>
    <trust-anchors>
        <certificates src="system" />
        <certificates src="user" />
    </trust-anchors>
</debug-overrides>

74
задан double-beep 24 March 2019 в 11:03
поделиться

6 ответов

Полу -колон после закрывающей скобки в объявлении типа требуется языком. Так было с самых ранних версий C.

И да, люди действительно делают заявление, которое вы только что там изложили. Это полезно для создания типов областей действия внутри методов.

void Example() {
  struct { int x; } s1;
  s1.x = 42;

  struct ADifferentType { int x; };
}

В этом случае, я думаю, понятно, зачем нужны точки с запятой. Что касается необходимости в более общем случае объявления в заголовочном файле, я не уверен. Мое предположение состоит в том, что он исторический и был сделан, чтобы упростить написание компилятора.

43
ответ дан 24 November 2019 в 11:58
поделиться

Я полагаю, это потому, что классы являются объявлениями, даже когда им нужны скобки для группировки. И да, есть исторический аргумент, что, поскольку в C вы могли бы сделать

struct
{
  float x;
  float y;
} point;

, вы должны в C ++ быть в состоянии сделать то же самое, имеет смысл для объявления class вести себя таким же образом.

17
ответ дан 24 November 2019 в 11:58
поделиться

Это сокращение от

class MyClass
{
.
.
.
};

// instance declaration
MyClass MyInstance;  // semicolon here

. Точка с запятой после фигурных скобок объявления класса на самом деле излишня, но именно так определяется C ++. Точка с запятой после объявления переменной всегда нужна и имеет смысл.

10
ответ дан 24 November 2019 в 11:58
поделиться

Я не использую такие объявления

class MyClass
{
.
.
.
} MyInstance;

Но в этом случае я могу понять, почему точка с запятой есть.
Потому что это похоже на int a; - объявление переменной.

Вероятно, для согласованности, поскольку вы можете пропустить точку с запятой «MyInstance», она остается там.

5
ответ дан 24 November 2019 в 11:58
поделиться

Это необходимо после struct по соображениям совместимости, и как бы вы хотели это:

struct MyStruct { ... };
class  MyClass  { ... }    //inconsistency
3
ответ дан 24 November 2019 в 11:58
поделиться

In C/C++ the ; is a statement terminator. All statements are terminated with ; to avoid ambiguity (and to simplify parsing). The grammar is consistent in this respect. Even though a class declaration (or any block for that matter) is multiple lines long and is delimited with {} it is still simply a statement (the { } is part of the statement) hence needs to be terminated with ; (The ; is not a separator/delimitor)

In your example

class MyClass{...} MyInstance;

is the complete statement. One could define multiple instances of the declared class in a single statement

class MyClass{...} MyInstance1, MyInstance2;

This is completely consistent with declaring multiple instances of a primitive type in a single statement:

int a, b, c;

The reason one does not often see such desclaration of class and instance, is the instance could ?only? be a global variable, and you don't really often want global objects unless they are static and/or Plain Old Data structures.

3
ответ дан 24 November 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: