Почему суд печатает массивы символов по-другому по сравнению с другими массивами?

Blade кэширует возвращаемую строку вашей пользовательской директивы, но если эта строка является PHP-кодом, она будет оценена при доступе к кэшированному представлению. Что вы можете сделать, это включить всю условную логику в возвращаемую строку, например:

\Blade::directive('signup_done', function () {
    return "<?php if (\Auth::check() && \Auth::user()->signup_done) { ?>";
});

Возможно, это не лучшее решение, но оно должно работать.

14
задан Yu Hao 16 August 2015 в 15:43
поделиться

4 ответа

Это - operator< < это перегружается для const void* и для const char*. Ваш массив символов преобразовывается в const char* и передается той перегрузке, потому что это соответствует лучше, чем к const void*. Международный массив, однако, преобразовывается в const void* и передается той версии. Версия operator< < взятие const void* просто производит адрес. Версия, берущая const char* на самом деле обработки это как струна до и выводы каждый символ до завершающегося нулевого символа. Если Вы не хотите это, преобразуйте свой массив символов в const void* явно при передаче его operator< <:

cout << static_cast<const void*>(arr2) << endl;
29
ответ дан 1 December 2019 в 08:20
поделиться

Поскольку cout's operator << перегружается для char* к выходным строкам, и arr2 соответствия это.

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

4
ответ дан 1 December 2019 в 08:20
поделиться

Существует стандартная перегрузка для символа*, что выводы NUL завершили строку.

0
ответ дан 1 December 2019 в 08:20
поделиться

В то время как бросок является, вероятно, более значимым подходом, Вы могли также использовать addressof оператор:

cout << &arr2 << endl;
0
ответ дан 1 December 2019 в 08:20
поделиться
Другие вопросы по тегам:

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