У меня была эта проблема, когда я просматривал интернет через мою мобильную точку доступа. он также сжимал изображения и добавлял следующий сценарий внизу тега body
<script language="javascript"><!--
bmi_SafeAddOnload(bmi_load,"bmi_orig_img");//-->
</script>
Когда я подключался к собственному Wi-Fi-соединению, все, похоже, работает для меня. Надеюсь, что это поможет кому-то.
Это вопрос стиля. Некоторым людям нравится дополнительный this->
, чтобы сделать более очевидным, что вы обращаетесь к члену класса. Но если вы почувствуете, что без него будет очевидно, что нет никакого различия в сгенерированном коде или производительности.
(Помимо случая, о котором вы говорили с перекрывающимися областями, this->
также может быть обязательным в шаблоне, когда пытаясь назвать элемент базового класса, зависящего от типа.)
Как правило, это вопрос местных соглашений. Большинство мест, которые я видел, не используют this->
, кроме случаев, когда это необходимо, и это соглашение, которое я предпочитаю, но я слышал о тех, кто предпочитает использовать его систематически.
два случая, когда это необходимо. Во-первых, если вы скрыли имя с тем же именем в локальной области; если, например, у вас есть член с именем toto
, и вы также назвали свой аргумент функции toto
. Многие соглашения о кодировании отмечают либо член, либо суждения, чтобы избежать этого случая, например. все имена участников начинаются с my
или m_
, или имя параметра начинается с the
.
В другом случае this->
можно использовать в шаблоне, чтобы сделать имя зависимым от имени , Это имеет значение, если класс шаблона наследуется от зависимого типа, и вы хотите получить доступ к члену базы, например:
template <typename T>
class Toto : public T
{
public:
int f()
{
return this->g();
}
};
Без this->
здесь g()
-зависимое имя, и компилятор будет искать его в контексте определения шаблона, не принимая во внимание базовый класс.
просто избыточно использовать this->
для вызова участников, если вы не хотите, чтобы семантически различать местные и члены быстро. многие люди используют префикс m_
для членов класса, чтобы не писать this->
все время.
с помощью «this->» лучше (вы уверены, что это члены), но это не имеет значения
Если функция шаблона делает вызов функции-члена таким образом, что вызов не зависит от каких-либо параметров шаблона, this->
может использоваться, чтобы помочь компилятору в качестве альтернативы MyUtopicClass<int, double, double>::vin()
.
Я всегда использую this
при вызове функций [].
self
является обязательным, поэтому для меня это не является реальной нагрузкой. Но для членов данных я использую это только тогда, когда это необходимо, потому что ADL не происходит. Чтобы ответить на ваши конкретные вопросы:
В рамках функции-члена класса в C ++ это имеет значение, если я использую this-> dataMember или просто dataMember?
blockquote >Да, если это внутри шаблона класса. Тогда
dataMember
считается необязательным именем, что может привести к семантическим различиям. Например:#include <iostream> int i = 1; struct R { int i; R(): i(2) { } }; template<typename T> struct S: T { void f() { std::cout << i << ' ' // selects ::i << this->i // selects R::i << std::endl; } }; int main() { S<R>().f(); }
Что считается лучшим стилем?
blockquote>Я не думаю, что в сообществе есть сильное мнение об этом. Использовать любой стиль, но быть последовательным.
Есть ли разница в производительности?
blockquote>Я уверен, что нет.
используйте это, когда у вас есть скрытый / закрытый член =), в любом другом случае это не делает разницы =)
из информационного центра IBM. Я цитирую следующие
Unless a class member name is hidden, using the class member name is equivalent to using
the class member name with the this pointer and the class member access operator (->).