Должен ли я использовать _T или _TEXT для строковых литералов C ++?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
27
задан Joe 8 July 2010 в 11:56
поделиться

8 ответов

Простой GREEP SDK показывает нам, что ответ заключается в том, что не имеет значения - они одинаковы . Они оба превращаются в __ t (x) .

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define _T(" *.h 
crt\src\tchar.h:2439:#define _T(x)       __T(x) 
include\tchar.h:2390:#define _T(x)       __T(x)

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define _TEXT(" *.h 
crt\src\tchar.h:2440:#define _TEXT(x)    __T(x) 
include\tchar.h:2391:#define _TEXT(x)    __T(x)

И для полноты:

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define __T(" *.h 
crt\src\tchar.h:210:#define __T(x)     L ## x 
crt\src\tchar.h:889:#define __T(x)      x 
include\tchar.h:210:#define __T(x)     L ## x 
include\tchar.h:858:#define __T(x)      x

Тем не менее, технически для C ++, вы должны использовать текст () вместо _Text () , но это ( В конце концов) тоже расширяется до того же, что тоже.

23
ответ дан 28 November 2019 в 04:22
поделиться

Сделайте Unicode и просто используйте L"My String Literal".

21
ответ дан 8 July 2010 в 11:56
поделиться

Ни. По моему опыту, есть два основных типа строковых литералов: те, которые являются инвариантными, и те, которые должны быть переведены, когда ваш код локализован.

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

Поэтому я использую _UT() для непереводимых строк, а ZZT() (или что-то еще, что легко найти) для строк, которые нужно будет перевести. Экземпляры _T() или _TEXT() в коде свидетельствуют о строковых литералах, которые еще не были правильно классифицированы.

_UT и ZZT оба определены #TEXT

4
ответ дан John Knoeller 8 July 2010 в 11:56
поделиться

Не используйте ни один, и, пожалуйста, также не используйте дерьмо L "...". Используйте UTF-8 для всех строк и конвертируйте их непосредственно перед передачей в API-интерфейсы Microsoft.

-3
ответ дан Pavel Radzivilovsky 8 July 2010 в 11:56
поделиться

Я думаю, что вы ищете просто {Binding}, который связывается с унаследованным DataContext. Вот пример, хотя немного странный показывает, как можно захватить цвет через привязку к DataContext:

<Window x:Class="AncestorBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <SolidColorBrush x:Key="MyBrush" Color="Blue" />
    </Window.Resources>
    <StackPanel>
        <Button DataContext="{Binding Source={StaticResource MyBrush}}" Content="My Button">
            <Button.Resources>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Background" Value="{Binding}" />
                </Style>
            </Button.Resources>
        </Button>
    </StackPanel>
</Window>
-121--4043515-

Метод SwapCache обеспечивает механизм управления приложением при применении обновлений. В обычных HTML-приложениях может быть трудно определить, присутствует ли правильный JS в браузере клиентов. Также реализации браузера варьируются в зависимости от того, когда кэш будет обновлен, я нашел iPhone особенно упрямым. swapCache вернул мне контроль над тем, как обновляется приложение, т.е. я могу выбрать автоматическое применение исправления или позволить пользователю выбрать время применения и т.д.

-121--2913896-

Я никогда не видел, чтобы кто-либо использовал _ TEXT () вместо _ T () .

6
ответ дан 28 November 2019 в 04:22
поделиться

из Raymond Chen :

Text vs. _text vs. _t, и Unicode vs. _Unicode

Простые версии без Подчеркивание влияет на набор символов Файлы заголовка Windows лечат как дефолт. Так что если вы определите Unicode, Тогда GetWindowText будет отображаться на Getwindowtextw вместо GetWindowTexta, например. Точно так же текстовый макрос будет отображаться на Я «...» вместо «...».

Версии с подчеркиванием влияют на символ Установите время выполнения C C Заголовок файлов относятся по умолчанию. Так что если Вы определяете _Unicode, то _tcslen будет карта в WCSLEN вместо стрелна, для пример. Аналогично, макрос _Text будет отображаться на l "..." вместо "...".

Как насчет _t? Хорошо, я не знаю об этом. Может быть, это было просто Сохраните кого-нибудь, кто набрал.

Краткая версия: _t () - это ленивый мужской _text ()

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

_TEXT("Some string containing Çontaining");
TEXT("€xtended characters.");

Байты считают компилятор, зависит от кодовой страницы вашего редактора.

14
ответ дан 28 November 2019 в 04:22
поделиться

Эти макросы - это удержание через дни, когда приложение может фактически хотеть скомпилировать как Unicode, так и версию ANSI.

сегодня нет причин делать это сегодня - это все вегетарианские. Microsoft застрял с поддержкой всевозможной конфигурации навсегда, но вы не. Если вы не составляете как ANSI, так и Unicode (и никто не так, давайте быть честным), просто перейдите к L «Text».

И да, на случай, если сейчас не было понятно: _t == _text

4
ответ дан 28 November 2019 в 04:22
поделиться

Здесь интересное чтение из хорошо известного и уважаемого источника.

Аналогичным образом, макрос _TEXT будет сопоставляться с L "..." вместо "...".

А как же _T? Ладно, я не знаю об этом. Может быть, это просто для того, чтобы сэкономить кому-нибудь время на печатании.

8
ответ дан 28 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

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