Автоматически прокрутите экран в энергии когда около вершины/нижней части?

Похоже, что Visual Studio просто не работает в отношении того, какой конструктор он вызывает, когда аргумент по умолчанию представляет собой список инициализатора . Этот код:

#include 

struct test {
  test ()  { std::cout << "test ()" << std::endl ; } 
  test (int)  { std::cout << "test (int)" << std::endl ; }
};

void func( test const &s = {} )
{
}

int main()
{
    test s = {} ;
    func() ;
}

производит этот результат в gcc и clang, смотрите его здесь :

test ()
test ()

, в то время как Visual Studio производит это результат:

test ()
test (int)

и для этого кода:

#include 
#include 

struct test {
  test ()  { std::cout << "test ()" << std::endl ; };

  test (int)  { std::cout << "test (int)" << std::endl ; };
  test ( std::initializer_list) { std::cout << "test (initializer_list)" << std::endl ; } ;
};

void func( test const &s = {0} )
{
}

int main()
{
    test s = {0} ;
    func() ;
}

gcc и clang дают этот результат, смотрите в прямом эфире здесь :

 test (initializer_list)
 test (initializer_list)

, в то время как Visual Studio выдает эту ошибку:

 error C2440: 'default argument' : cannot convert from 'initializer-list' to 'const test &'
    Reason: cannot convert from 'initializer-list' to 'const test'
    No constructor could take the source type, or constructor overload resolution was ambiguous

Обновление

Для проверки работоспособности я вернулся к стандарту, чтобы убедиться, что там не было каким-то странным правилом, лежащим в основе этого различия, или, возможно, каким-то ограничением, делающим этот код некорректным . Насколько я могу судить, этот код не является неправильно сформированным . Грамматика секции 8.3.5 специально позволяет это:

parameter-declaration:
  attribute-specifier-seqopt decl-specifier-seq declarator
  attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
  [...]

Это не похоже на секции 8.5 Инициализаторы или 8.3.6 Аргументы по умолчанию добавляют любые ограничения, но отчет об этом дефекте 994. braced-init-list в качестве аргумента по умолчанию и рабочий документ Формулировка скобочных инициализаторов в качестве аргументов по умолчанию проясняет, что он был задуман, и обрисовывает в общих чертах изменения, внесенные в стандарт, чтобы позволить его и смотреть В дельтах нет явных ограничений.

36
задан CMB 11 June 2009 в 16:35
поделиться

3 ответа

Из моего .vimrc:

set scrolloff=3 " Keep 3 lines below and above the cursor
74
ответ дан 27 November 2019 в 05:36
поделиться

Вы также можете посмотреть на scrolljump, который устанавливает количество строк, прокручиваемых при нажатии на «границу», установленную с помощью scrolljump.

4
ответ дан 27 November 2019 в 05:36
поделиться

Try scrolloff=9999. После того как курсор достигнет середины экрана, нажатие j переместит экран вверх на единицу, вместо того чтобы перемещать курсор вниз. Работает отлично, как только вы привыкнете к этому.

3
ответ дан 27 November 2019 в 05:36
поделиться