小编St.*_*rio的帖子

子对象初始化的顺序是什么?

让我们有一个o类的对象,它包含成员子对象sosso另一个类类型.请考虑以下示例:

#include <iostream>
using namespace std;
    struct SO{ SO(){ cout << "SO()" << endl; } };
    struct SSO{ SSO(){ cout << "SSO()" << endl; } };

        struct O
        {
            O(){ cout << "O()" << endl; }
            SO so;
            SSO sso;
        };
    int main()
    {
        O o = *(new O);
    }
Run Code Online (Sandbox Code Playgroud)

输出:

SO()

SSO()

O()
Run Code Online (Sandbox Code Playgroud)

演示

5.3.4节所述:

创建类型为T的对象的new-expression初始化该对象,如下所示:

- 如果省略new-initializer,则默认初始化对象(8.5); 如果没有执行初始化,则该对象具有不确定的值.

- 否则,根据8.5的初始化规则解释new-initializer以进行直接初始化.

o在该特定情况下,对对象执行默认初始化(即构造函数调用).但他的子对象怎么样?似乎也执行默认初始化.但是,如果它的完整对象是默认初始化的话,它在标准中指定了对任何子对象执行默认初始化的位置?

c++ initialization

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

如何启用assert语句执行?

我写了以下代码:

class Cl
{
    public static void main (String[] args) throws java.lang.Exception
    {
        assert true; //1
        Bar.foo();
    }

    static class Bar{
        public static void foo(){
            boolean enabled = false;
            assert enabled = true;
            System.out.println("Asserts " + 
               (enabled ? "enabled" : "disabled"));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

DEMO

JLS 14.10说:

当且仅当主机系统确定词法包含断言 语句的顶级类启用断言时,才会启用在其类完成初始化之后执行的断言语句.

我以为我在Cl课堂上通过断言true启用了断言,但它仍然无效.如何启用有关JLS所说内容的断言?

java

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

是否可以在gradle项目中组合java和groovy源?

我有以下项目结构:

src
|
|--main
    |
    |--java
    |    |
    |    |--p
    |       |--S.java
    |  
    |
    |--groovy
         |
         |--p
            |--Main.groovy
Run Code Online (Sandbox Code Playgroud)

我想要学习的是如何将java和groovy编译的类组合在一起.想象一下,S.java包含以下内容:

package p;

public class S {
    public static void p() {
        System.out.println("p");
    }
}
Run Code Online (Sandbox Code Playgroud)

和Main.groovy:

package p

public class Main {
    public static void main(String[] args) {
        S.p
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我编写的构建脚本是最简单的,仅包含

apply plugin : 'groovy'
Run Code Online (Sandbox Code Playgroud)

我想通过该命令实现的目的build gradle是获取一个jar与JVM一起使用的文件.但相反,我得到以下错误:

Cannot infer Groovy class path because no Groovy Jar was found on class path: co
nfiguration ':compile'
Run Code Online (Sandbox Code Playgroud)

你能帮我修一下这个错误吗?

java groovy gradle

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

Groovy函数调用省略括号

根据gradle文档/第13.5.2节,我们可以省略方法调用中的括号:

括号是方法调用的可选项.

但是当我们尝试应用java插件时它似乎不起作用.如果脚本包含以下行:

apply [plugin: 'java']
Run Code Online (Sandbox Code Playgroud)

我们会收到错误:

 Maybe something should be set in parentheses or a comma is missing?
 @ line 1, column 8.
     apply [plugin: 'java']
            ^
Run Code Online (Sandbox Code Playgroud)

但是如果我们把这个Map-literal放到括号中它就可以了.

apply([plugin: 'java'])
Run Code Online (Sandbox Code Playgroud)

因此,当参数为a时Map,我们不能省略括号,是吗?

groovy gradle

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

BigDecimal规模不起作用

我有以下代码:

BigDecimal result = BigDecimal.ZERO;
result.setScale(2, BigDecimal.ROUND_FLOOR); //1
BigDecimal amountSum;

// amount sum computation

BigDecimal amountByCurrency = amountSum.divide(32); //-0.04
result.add(amountByCurrency); //2
Run Code Online (Sandbox Code Playgroud)

线条//1规模仍然是0.为什么?因此,//2评估不会影响结果.怎么了?

java bigdecimal

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

如何使用 grep 通过正则表达式在目录中查找?

我试过

grep -R '.*invalidTemplateName.*' -regex './online_admin/.*/UTF-8/.*'
Run Code Online (Sandbox Code Playgroud)

找到所有可能出现的 '. 无效的模板名称。' 目录正则表达式模式中的正则表达式'./online_admin/.*/UTF-8/.*',但它不起作用。我收到消息:

grep: ./online_admin/.*/UTF-8/.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果我使用

grep -R '.*invalidTemplateName.*' .
Run Code Online (Sandbox Code Playgroud)

它在当前目录的所有子目录中查找,这是压倒性的。如何在 grep 中指定目录模式?是否可以?

regex bash find

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

通用类型子类

我有以下泛型类:

public class Evalutor<T>{

}
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为NumberEvalutor的类型,如下所示:

public class NumberEvalutor<T> extends Evalutor<T extends Number>{ //Syntax error on token "extends", , expected

}
Run Code Online (Sandbox Code Playgroud)

但我不能这样做.也许你可以建议另一种类型安全的方式?

java generics

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

如何使返回值const影响移动语义?

例如:

class Rational
{
public: 
    const Rational operator*(Rational){ return Rational(); }
}
Run Code Online (Sandbox Code Playgroud)

这个答案中提到了它,但它没有解释它实际上如何影响移动语义.你不能举一些例子吗?

c++ move-semantics

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

使用新表达式创建内置类型

让我们考虑以下简单程序:

int main()
{
    int *a = new int;
}
Run Code Online (Sandbox Code Playgroud)

难道是可靠的价值*a0.我知道这一点,因为原语没有默认初始化:

默认初始化T类型的对象意味着:

(7.1) - 如果T是(可能是cv限定的)类类型(第9条),则考虑构造函数.枚举适用的构造函数(13.3.1.3),并通过重载解析(13.3)选择初始化函数()的最佳构造函数.使用空参数列表调用如此选择的构造函数来初始化对象.

(7.2) - 如果T是数组类型,则每个元素都是默认初始化的.

(7.3) - 否则,不执行初始化.

我说这*a不是初始化,所以访问它会导致UB.那是对的吗?

c++ initialization

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

为什么读取不存在的文件会打印垃圾字符?

我尝试理解读入的文件c++并尝试读取故意不存在的文件

//includes ommited

int main(int argc, char ** argv)
{
        if(argc != 1)
                throw std::exception();
        std::ifstream file(argv[0]);
        std::string content((std::istream_iterator<char>(file)), std::istream_iterator<char>());
        std::cout << content.c_str() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

它打印以下内容:

ELF
Run Code Online (Sandbox Code Playgroud)

它为什么意味着?这样做我只是得到UB吗?由于我是一个Java编码器,我预计如果我们尝试读取一个不存在的文件,就会抛出一些异常......

c++ file

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

标签 统计

c++ ×4

java ×4

gradle ×2

groovy ×2

initialization ×2

bash ×1

bigdecimal ×1

file ×1

find ×1

generics ×1

move-semantics ×1

regex ×1