标签: this

每个c ++成员函数是否隐含地将"this"作为输入?

当我们在c ++中为类创建一个成员函数时,它有一个隐式的额外参数,它是一个指向调用对象的指针 - 被称为this.

对于任何函数都是如此,即使它不使用this指针也是如此.例如,给定班级

class foo
{
private:
    int bar;
public:
    int get_one()
    {
      return 1;  // Not using `this`
    }
    int get_bar()
    {
        return this->bar;  // Using `this`
    }
}
Run Code Online (Sandbox Code Playgroud)

两个函数(get_oneget_bar)都将this作为隐式参数,即使其中只有一个实际使用它吗?
这样做似乎有点浪费.

注意:我理解正确的做法是做get_one()静态,答案可能取决于实现,但我只是好奇.

c++ performance this member-functions language-lawyer

22
推荐指数
2
解决办法
1268
查看次数

call()在其自身上下文中的函数

var f = function() {
  this.x = 5;
  (function() {
    this.x = 3;
  })();
  console.log(this.x);
};

f.call(f);

f();

f.call();
Run Code Online (Sandbox Code Playgroud)

var f作为f.call(f)输出运行5。当作为f()f.call()输出运行时3

在每种情况下会发生什么?内部功能this指的是什么?

javascript this

22
推荐指数
2
解决办法
1117
查看次数

为什么编译器至少不警告这个== null

为什么C#编译器甚至没有对此代码发出警告?:

if (this == null)
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

显然,这种情况永远不会得到满足.

c# compiler-construction null this

21
推荐指数
2
解决办法
1761
查看次数

从PHP中的实例调用静态方法,以后的弃用?

虽然我理解$this当在静态上下文中调用方法时该变量不可用,但为了帮助将我的应用程序组件彼此解耦,我认为从实例调用静态方法是有意义的.例如:

class MyExample{
    private static $_data = array();
    public static function setData($key, $value){
        self::$_data[$key] = $value;
    }
    // other non-static methods, using self::$_data
}

// to decouple, another class or something has been passed an instance of MyExample
// rather than calling MyExample::setData() explicitly
// however, this data is now accessible by other instances
$example->setData('some', 'data');
Run Code Online (Sandbox Code Playgroud)

是否有计划弃用此类功能,或者我是否愿意期待对此的支持?我一起工作error_reporting(-1)以确保一个非常严格的开发环境,并且目前还没有任何问题(PHP 5.3.6)但是我知道反向变得不受支持; 也就是说,静态调用实例方法.

php static-methods this deprecated instance-methods

21
推荐指数
1
解决办法
1万
查看次数

构造函数的初始化列表中的'this'指针

我想我无法理解为什么这不起作用.我一直以为我可以在构造函数中使用'this'指针,但我从来不知道我不能在初始化列表中使用'this'.

#include <iostream>

class A {
    public:
        int a;
        int b;
        A(int a = 0, int b = 0) : this->a(a), this->b(b) { }
        void print() {
        std::cout << a << ", " << b << std::endl;
    }
};

int main() {
    A a;
    a.print();
}
Run Code Online (Sandbox Code Playgroud)

我很想知道与之相关的细节.

c++ this syntax-error language-lawyer ctor-initializer

21
推荐指数
2
解决办法
2191
查看次数

为什么java中不允许赋值为'this'?

我从编译器得到的错误是"赋值的左侧必须是变量".我的用例是深度复制,但并不真正相关.

在C++中,可以分配给*this.

问题不在于如何规避任务this.这很简单,但是决定不做this变量的背后有什么理由.

原因是技术性的还是概念性的?

我的猜测到目前为止 - 在随机方法中重建Object的可能性容易出错(概念性),但技术上可行.

编辑请限制"因为Java规范如此说"的变化.我想知道决定原因

java reference this variable-assignment

20
推荐指数
3
解决办法
9805
查看次数

this:不能在静态上下文中使用它

你能帮我解决下面的代码吗?错误是:"无法在静态上下文中使用它"

public class Sample2 {
    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        Sample2 sam=new Sample2();  

        //Below code works fine
        System.out.println(sam);

        //Below code is displaying error
        System.out.println(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

java this

20
推荐指数
2
解决办法
7万
查看次数

函数中该值为null(React-Native)

根据本地测试,'this'在行渲染函数中似乎为null.因此,这阻止了我在onPress道具上绑定本地函数.

我有这个渲染块:

render() {
    return (
        <ListView
            dataSource={this.state.dataSource}
            renderRow={this._renderRow}
            renderHeader={this._renderHeader} 
            style={styles.listView} />
    );
}
Run Code Online (Sandbox Code Playgroud)

和一个本地功能

_visitEntryDetail() {
    console.log('test');
}
Run Code Online (Sandbox Code Playgroud)

然后行渲染

_renderRow(something) {
    return (
        <TouchableHighlight
            style={[styles.textContainer, filestyle.container]} 
            onPress={this._visitEntryDetail.bind(this)} >
            <View>
                <Text style={filestyle.text1} >{something.detail}</Text>
                <Text style={filestyle.text2} >{something.size}, {something.timestamp}</Text>
            </View>
        </TouchableHighlight>
    );
}
Run Code Online (Sandbox Code Playgroud)

这回来了

message: null is not an object (evaluating 'this.$FileList_visitEntryDetail')"
Run Code Online (Sandbox Code Playgroud)

检查renderRow上的"this"在替换上面的代码时返回null:

_renderRow(file) {
    console.log(this);
    return (
        <TouchableHighlight
            style={[styles.textContainer, filestyle.filelistcontainer]} 
             >
Run Code Online (Sandbox Code Playgroud)

以下控制台输出:

RCTJSLog> null
Run Code Online (Sandbox Code Playgroud)

但是很好

render() {
    console.log('inside render. this value is below me');
    console.log(this);
    return (
        <ListView
Run Code Online (Sandbox Code Playgroud)

安慰

RCTJSLog> "inside …
Run Code Online (Sandbox Code Playgroud)

listview this react-native

20
推荐指数
1
解决办法
1万
查看次数

为什么即使在调试版本中VS和Windbg也将"this"指针打印为"0xcccccccc"?

我尝试使用windbg在输入成员函数时打印"this"指针,如下所示.

class IBase {
    int m_i;
public:
    IBase() :m_i(23) {}
    virtual int FuncOne(void) = 0;
    virtual int FuncTwo(void) = 0;
};
class DerivedOne : public IBase {
public:
    virtual int FuncOne(void) { return 1; };//set break point here.
    virtual int FuncTwo(void) { return 2; };
};
class DerivedTwo : public IBase {
public:
    virtual int FuncOne(void) { return 101; };
    virtual int FuncTwo(void) { return 102; };
};
void DoIt(IBase* Base)
{
    int i=Base->FuncOne();//break point here
}
int main(int argc, …
Run Code Online (Sandbox Code Playgroud)

c++ pointers windbg this break

20
推荐指数
1
解决办法
1214
查看次数

js从类中调用静态方法

我有一个静态方法的类:

class User {
  constructor() {
    User.staticMethod();
  }

  static staticMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

对于静态方法是否有这样的东西(即引用没有实例的当前类).

this.staticMethod()
Run Code Online (Sandbox Code Playgroud)

所以我不必写类名'User'.

javascript static class this

20
推荐指数
2
解决办法
3万
查看次数