标签: assignment-operator

遗忘的赋值运算符"="和常见的":="

PL/pgSQL的文档说,变量的声明和赋值完成:=.但是简单,更短,更现代 (见脚注) =似乎按预期工作:

    CREATE OR REPLACE FUNCTION foo() RETURNS int AS $$
    DECLARE
      i int;
    BEGIN
      i = 0;  
      WHILE NOT i = 25 LOOP
          i = i + 1;
          i = i * i;
      END LOOP;
      RETURN i;
    END;
    $$ LANGUAGE plpgsql;

    > SELECT foo();
    25
Run Code Online (Sandbox Code Playgroud)

请注意,Pl/pgSQL可以清楚地区分分配和比较,如行中所示

      WHILE NOT i = 25 LOOP
Run Code Online (Sandbox Code Playgroud)

所以,问题是:

  • 我没有在文档中找到提及和/或解释这个的部分吗?
  • 是否有使用=代替的已知后果:=

编辑/脚注:

请使用" 简短,不完整和错误的编程语言历史 "中的"更现代"部分:

1970年 - Niklaus Wirth创建了Pascal,一种程序语言.批评者立即谴责Pascal,因为它使用"x:= x + y"语法而不是更熟悉的类C"x = x + y".尽管C还没有被发明,但这种批评仍在发生. …

postgresql plpgsql assignment-operator colon-equals

41
推荐指数
2
解决办法
8254
查看次数

作业返回的值

为什么常规赋值语句(比方说 x = 5)返回赋值的值(5在本例中),而赋值与变量declaration(var x = 5)一起返回undefined

我通过在Chrome浏览器的Javascript控制台中执行这些语句获得了返回值:

> var x = 5;
undefined
> y = 5;
5
Run Code Online (Sandbox Code Playgroud)

javascript assignment-operator

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

Lua运算符,为什么不定义+ =, - =等等?

这个问题我有一段时间以来一直有点恼火,而且从来没有到处寻找答案.

但是我想我至少可以问这个问题,也许有人可以解释一下.

基本上我使用的许多语言都使用语法糖来编写(使用C++中的语法):

int main() {
    int a = 2;
    a += 3; // a=a+3
}
Run Code Online (Sandbox Code Playgroud)

虽然在lua +=中没有定义,所以我必须写a=a+3,这也是关于语法糖.当使用更"有意义"的变量名称时,例如:bleed_damage_over_time或者它开始变得乏味的东西:

bleed_damage_over_time = bleed_damage_over_time + added_bleed_damage_over_time 
Run Code Online (Sandbox Code Playgroud)

代替:

bleed_damage_over_time += added_bleed_damage_over_time
Run Code Online (Sandbox Code Playgroud)

所以如果你没有一个好的解决方案,我想知道如何解决这个问题,在这种情况下,我当然会有兴趣听到它; 但是为什么lua没有实现这种语法糖.

lua language-design assignment-operator compound-assignment

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

39
推荐指数
2
解决办法
3290
查看次数

data.table对象分配有:=来自未打印的函数内

我想data.table在一个函数内修改一个.如果我:=在函数中使用该功能,则仅为第二次调用打印结果.

请看下图:

library(data.table)
mydt <- data.table(x = 1:3, y = 5:7)

myfunction <- function(dt) {
    dt[, z := y - x]
    dt
}
Run Code Online (Sandbox Code Playgroud)

当我只调用该函数时,表格不会被打印(这是标准行为.但是,如果我将返回的内容保存data.table到新对象中,则不会在第一次调用时打印,仅针对第二次调用.

myfunction(mydt)  # nothing is printed   
result <- myfunction(mydt) 
result  # nothing is printed
result  # for the second time, the result is printed
mydt                                                                     
#    x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4 
Run Code Online (Sandbox Code Playgroud)

你能解释一下为什么会发生这种情况以及如何预防吗?

r function assignment-operator data.table

37
推荐指数
1
解决办法
2189
查看次数

const成员和赋值运算符.如何避免未定义的行为?

回答了关于std :: vector of objects和const-correctness的问题,得到了不应有的 downvote和关于undefined行为的评论.我不同意,因此我有一个问题.

考虑使用const成员的类:

class A { 
public: 
    const int c; // must not be modified! 
    A(int c) : c(c) {} 
    A(const A& copy) : c(copy.c) { }     
    // No assignment operator
}; 
Run Code Online (Sandbox Code Playgroud)

我想要一个赋值运算符,但我不想const_cast在下面的代码中使用其中一个答案:

A& operator=(const A& assign) 
{ 
    *const_cast<int*> (&c)= assign.c;  // very very bad, IMHO, it is undefined behavior
    return *this; 
} 
Run Code Online (Sandbox Code Playgroud)

我的解决方案是

A& operator=(const A& right)  
{  
    if (this == &right) return *this;  
    this->~A() 
    new (this) A(right); …
Run Code Online (Sandbox Code Playgroud)

c++ const undefined-behavior assignment-operator

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

Java中赋值操作的返回值

我在Java中遇到了一个声明

while ((line = reader.readLine()) != null) {
    out.append(line);
}
Run Code Online (Sandbox Code Playgroud)

赋值操作如何在Java中返回值?

我们正在检查的声明是line = reader.readLine(),我们将其与之进行比较null.

既然readLine会返回一个字符串,我们究竟要检查的是null什么?

java expression file-handling assignment-operator

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

如何在复制控制功能中处理C++数组成员?

这是我长期以来一直想知道的事情.请看以下示例:

struct matrix
{
    float data[16];
};
Run Code Online (Sandbox Code Playgroud)

我知道默认构造函数和析构函数在这个特定示例中做了什么(没有),但是复制构造函数和复制赋值运算符呢?

struct matrix
{
    float data[16];

    // automatically generated copy constructor
    matrix(const matrix& that) : // What happens here?
    {
        // (or here?)
    }

    // automatically generated copy assignment operator
    matrix& operator=(const matrix& that)
    {
        // What happens here?

        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

它涉及std::copystd::uninitialized_copymemcpymemmove或什么?

c++ arrays copy-constructor assignment-operator

31
推荐指数
1
解决办法
4198
查看次数

为什么不能使用非成员函数来重载赋值运算符?

赋值运算符可以使用成员函数重载,但不能使用非成员friend函数重载:

class Test
{
    int a;
public:
    Test(int x)
        :a(x)
    {}
    friend Test& operator=(Test &obj1, Test &obj2);
};

Test& operator=(Test &obj1, Test &obj2)//Not implemented fully. just for test.
{
    return obj1;
}
Run Code Online (Sandbox Code Playgroud)

它会导致此错误:

错误C2801:'operator ='必须是非静态成员

为什么friend函数不能用于重载赋值运算符?编译器允许重载其他运算符,例如+=-=使用friend.支持的固有问题/限制是operator=什么?

c++ operator-overloading assignment-operator

30
推荐指数
4
解决办法
2万
查看次数

赋值运算符在派生类中不可用

基类中的赋值运算符似乎在派生类中不可用.鉴于此代码:

#include <iostream>

class A{
    int value;
public:
    A& operator=(int value){
        this->value = value;
        return *this;
    }
};

class B : public A{};

int main(){
    B b;
    b = 0; // Does not work
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 6.4说:

错误:'operator ='不匹配(操作数类型为'B'和'int')

怎么了?

c++ inheritance assignment-operator

30
推荐指数
4
解决办法
1409
查看次数