У меня возникли некоторые трудности с пониманием [basic.scope.pdecl] / 7

Вы можете изменить его, как это, в классе парсеров из строки 35 и дальше.

function curl_get_contents($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

function file_get_html()
{
  $dom = new simple_html_dom;
  $args = func_get_args();
  $dom->load(call_user_func_array('curl_get_contents', $args), true);
  return $dom;
}

Вы пробовали другой сайт?

6
задан Ayrosa 18 March 2019 в 18:00
поделиться

2 ответа

Я хотел бы увидеть пример, демонстрирующий применение пункта (7.2) выше, где упомянутое объявление будет первым в его пространстве имен.

Просто:

namespace ns {
    // declares S into ns as per [basic.scope.pdecl]
    void f(struct S&);
}

extern ns::S s;
//extern ::S s; // not declared

Здесь struct S сначала объявляется в подробном спецификаторе типа в условии объявления-параметра функции, определенной в области пространства имен, в форме class-key identifier, и поэтому [basic.scope.pdecl] /7.2 применяется и struct S объявляется в пространстве имен ns, где объявлена ​​функция.

вам нужно будет использовать объект класса S в вашей функции f

Вот пример :

[ 111]

В качестве бонуса приведен пример, в котором класс не был впервые объявлен в подробном спецификаторе типа, и поэтому правило в кавычках неприменимо:

struct S;
namespace ns {
    void f(struct S&); // refers to ::S
}

//extern ns::S s; // not declared
extern ::S s;

Здесь разработанный-тип-спецификатор не является первым объявлением struct S, поэтому [basic.scope.pdecl] / 7 не применяется, и никакой класс не объявлен в пространстве имен.

0
ответ дан eerorika 18 March 2019 в 18:00
поделиться

если мы исключим первое объявление struct S; сверху, код не скомпилируется !!

Ну, это потому, что вам все равно нужно объявить имя перед использованием это.

int S;
void f(struct S&); 
extern struct S s; // If you write this line before then it
                   // will not compile.
                   // The name still needs to be declared
                   // before you use it.
// If you drop the `int S` above, then the following
// will also compile, since S has already been declared
// extern S s2;

int main(){
    f(s);
}

Обратите внимание, что приведенный выше код компилируется и выполняется правильно, но разработан-спецификатор типа в параметре-объявлении-разделе функции f не первый в глобальном пространстве имен.

Я не понимаю, что вы пытаетесь здесь сказать. Поскольку это не первое, имя не объявляется и [basic.scope.pdecl] p7 не применяется.

Я хотел бы увидеть пример, демонстрирующий применение пункта (7.2) выше, где упомянутое объявление будет первым в его пространстве имен.

auto addrof(struct S& s) { // First declaration
    return &s;
}
int get(struct T&); // First declaration
0
ответ дан Rakete1111 18 March 2019 в 18:00
поделиться
Другие вопросы по тегам:

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