小编csg*_*guy的帖子

字符串文字的调用方法(Java)

我知道字符串文字是对象。根据

https://zh.wikibooks.org/wiki/Java_Programming/Classes_Objects_and_Types

创建对象时,也会创建对该对象的引用。只能通过此对象引用才能在Java中直接访问该对象。该对象引用具有分配给它的类型。当将对象引用作为参数传递给方法时,我们需要这种类型。

但是,当我们有文字访问String方法时,是否违反了这一规定?

例如:

System.out.println("Literal".toUpperCase());
Run Code Online (Sandbox Code Playgroud)

这不是直接访问对象吗?与通过引用访问对象相反。

例如:

String x = "Literal"; 
System.out.println(x.toUpperCase());
Run Code Online (Sandbox Code Playgroud)

java string object

13
推荐指数
1
解决办法
867
查看次数

带 <T> 或不带 (C++) 的类模板

根据为什么在函数返回类型中不允许参数推导?

在模板类成员函数中指定返回类型时,我们必须具体,例如:“类型 std::vector不是类型,std::vector<int>是”。

那么为什么这两个例子都能编译呢?如果我不在<T>第一个示例中包含 the ,它甚至不应该被视为一种类型,对吗?

template<typename T>
Queue<T>::Queue(const Queue& st) {}

template<typename T>
Queue<T>::Queue(const Queue<T>& st) {}
Run Code Online (Sandbox Code Playgroud)

鉴于此模板类

template<typename T>
class Queue {
   private:

    struct Node {
        Node (T value) : value(value), next(nullptr) {}
        Node (T value, Node* next) : value(value), next(next) {}
        T value;
        Node* next;
    };

    Node* head;
    size_t sz;
    void cleanList();

  public:
    Queue();

    Queue(const Queue& st);
    Queue& operator=(const Queue& st);

    ~Queue();

    size_t size() const noexcept;
    bool isEmpty() const noexcept;

    T& …
Run Code Online (Sandbox Code Playgroud)

c++ templates

6
推荐指数
1
解决办法
101
查看次数

隐式转换会丢失信息吗?

根据https://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/

“关于促销活动,要记住的重要一点是,促销活动始终是安全的,不会造成数据丢失。”

但是https://www.geeksforgeeks.org/type-conversion-in-c/指出:

“隐式转换可能会丢失信息,符号可能会丢失(将符号隐式转换为无符号),并且会发生溢出(将long long隐式转换为float时)。”

我知道隐式转换是安全的,但我看不出不会造成数据丢失。哪个正确?

c++ implicit-conversion

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

当 Injected-Class-Name 发生时会发生什么?(C++)

根据https://en.cppreference.com/w/cpp/language/injected-class-name

在类作用域中,当前类的名称被视为公共成员名称;这称为注入类名。名称的声明点紧跟在类定义的左大括号之后。

int X;
struct X {
    void f() {
        X* p; // OK. X refers to the injected-class-name
        ::X* q; // Error: name lookup finds a variable name, which hides the struct name
    }
};
Run Code Online (Sandbox Code Playgroud)

那么代码中到底发生了什么?是X* p变成了X::X* p

c++ scope class name-lookup injected-class-name

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

为什么在返回类型中需要 typename?C++

给定一个带有嵌套 Node 结构的模板类 Queue。

为什么这里的返回类型需要 typename ?

template<typename T>
typename Queue<T>::Node* Queue<T>::test() {}
Run Code Online (Sandbox Code Playgroud)

模板类 Queue 中嵌套的 struct Node 将在Queue<T>::没有 typename的范围内。

根据我在哪里以及为什么必须放置“模板”和“类型名称”关键字?

我们决定编译器应该如何解析它。如果 t::x 是一个依赖名称,那么我们需要在它前面加上 typename 前缀以告诉编译器以某种方式解析它。

但我不明白为什么使用 typename 是合理的?

c++ templates typename

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

为什么这个层序遍历在 O(n) 时间内运行?

    vector<vector<int>> levelOrder(TreeNode* root) {

        queue<TreeNode*> bfs;
        if (root != nullptr) bfs.push(root);
        vector<vector<int>> sol;
        vector<TreeNode*> temp; 
        vector<int> indivSol;
        
        while (!bfs.empty()) {
            
            int currSz = bfs.size();
            for (int i = 0; i < currSz; i++) {
                temp.push_back(bfs.front());
                bfs.pop();
                
                indivSol.push_back(temp.at(i)->val);                

                if (temp.at(i)->left != nullptr) bfs.push(temp.at(i)->left);
                if (temp.at(i)->right != nullptr) bfs.push(temp.at(i)->right);
            }
            
            temp.clear();
            sol.push_back(indivSol);
            indivSol.clear();
            
        }
        
        return sol;
    }
Run Code Online (Sandbox Code Playgroud)

我知道外部 while 循环将运行n时间(n即树中的节点数),但是内部for循环会使解决方案O(n^2)及时运行吗?由于一棵树2^n在级别上最多有节点n,因此currSz可以从1 to 2 to 4 to 8 to …

c++ algorithm big-o

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

Constexpr变量不是编译时间值吗?

根据https://docs.microsoft.com/zh-cn/cpp/cpp/constexpr-cpp?view=vs-2019

“ constexpr表示该值或返回值是恒定的,并且,如果可能,在编译时进行计算。”

此外,constexpr和静态constexpr全局变量之间的区别

“在变量声明中,constexpr隐含const,并且默认情况下,名称空间范围内的const变量具有内部链接(因此,添加static不会更改任何内容)。”

我认为这constexpr意味着const隐含static

但是,这个问题的答案使我感到困惑:什么时候以及为什么在constexpr中使用static?

它指出

  1. “ constexpr变量不是编译时值”
  2. “看来,在某些特殊情况下,我们可以受益于静态constexpr变量的静态存储持续时间。”

我有什么误会?

c++ constexpr

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

初始化参数时会发生什么?C++

void foo (int i , int k = 7) {
    cout << k;
}

int main(){
    foo(1, 2);    
}
Run Code Online (Sandbox Code Playgroud)

k将输出2.我的问题是,foo以什么顺序初始化参数并获取参数?什么是foo经历的过程2.谢谢

c++ parameters

2
推荐指数
1
解决办法
66
查看次数

未初始化的变量会发生什么?C++

int main()
{    
    int a;
    cout << a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么要输出值 0。我想如果一个变量未初始化,它会输出一个垃圾值。

但是,我也记得听说整数的默认值是 0,所以我有点困惑。

谢谢

c++ variables initialization

2
推荐指数
1
解决办法
1903
查看次数

当cin中断时,为什么会发生变量?C++

我有以下代码片段:

    int a = 1;
    double b = 3.14;
    string c = "hi";

    cin >> a >> b >> c;
    cout << a << " " << b << " " << c << endl;
Run Code Online (Sandbox Code Playgroud)

如果我进入apple 11 tammy,为什么它会cout:0 3.14 hi而不是:1 3.14 hi

为什么破坏a时的变化价值cin

c++ cin

2
推荐指数
1
解决办法
66
查看次数