让我们有一个o类的对象,它包含成员子对象so和sso另一个类类型.请考虑以下示例:
#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在该特定情况下,对对象执行默认初始化(即构造函数调用).但他的子对象怎么样?似乎也执行默认初始化.但是,如果它的完整对象是默认初始化的话,它在标准中指定了对任何子对象执行默认初始化的位置?
我写了以下代码:
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)
当且仅当主机系统确定词法包含断言 语句的顶级类启用断言时,才会启用在其类完成初始化之后执行的断言语句.
我以为我在Cl课堂上通过断言true启用了断言,但它仍然无效.如何启用有关JLS所说内容的断言?
我有以下项目结构:
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)
你能帮我修一下这个错误吗?
根据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,我们不能省略括号,是吗?
我有以下代码:
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评估不会影响结果.怎么了?
我试过
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 中指定目录模式?是否可以?
我有以下泛型类:
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)
但我不能这样做.也许你可以建议另一种类型安全的方式?
例如:
class Rational
{
public:
const Rational operator*(Rational){ return Rational(); }
}
Run Code Online (Sandbox Code Playgroud)
在这个答案中提到了它,但它没有解释它实际上如何影响移动语义.你不能举一些例子吗?
让我们考虑以下简单程序:
int main()
{
int *a = new int;
}
Run Code Online (Sandbox Code Playgroud)
难道是可靠的价值*a是0.我不知道这一点,因为原语没有默认初始化:
默认初始化T类型的对象意味着:
(7.1) - 如果T是(可能是cv限定的)类类型(第9条),则考虑构造函数.枚举适用的构造函数(13.3.1.3),并通过重载解析(13.3)选择初始化函数()的最佳构造函数.使用空参数列表调用如此选择的构造函数来初始化对象.
(7.2) - 如果T是数组类型,则每个元素都是默认初始化的.
(7.3) - 否则,不执行初始化.
我说这*a不是初始化,所以访问它会导致UB.那是对的吗?
我尝试理解读入的文件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)
它打印以下内容:
ELF
Run Code Online (Sandbox Code Playgroud)
它为什么意味着?这样做我只是得到UB吗?由于我是一个Java编码器,我预计如果我们尝试读取一个不存在的文件,就会抛出一些异常......