我一直在通过一个非常简单的示例来设置远程方法调用应用程序,并且在通过客户端代码时,我无法理解一个代码,如下所示.当然,我的知识缺口,因为我虽然界面不能有对象,除非你使用匿名内部类.所以在下面的代码中我们是如何创建远程接口的对象的.如果我不得不猜测,对我来说似乎是某种类型的铸造.
import java.rmi.*;
public class HelloClient {
public static void main(String args[]) {
try {
if (args.length < 0) {
System.err.println("usage: java HelloClient string …\n");
System.exit(1);
}
HelloInterface hello = (HelloInterface)Naming.lookup("//localhost/Hello");
Run Code Online (Sandbox Code Playgroud)
最后一行是我无法理解(HelloInterface)部分究竟发生了什么?
在入口处reinterpret_cast,cppref说:
可以将积分,枚举,指针或指向成员类型的表达式转换为其自己的类型.结果值与表达式的值相同.(自C++ 11以来)
但是,以下代码无法编译(clang 5.0 with -std=c++1z):
enum class A : int {};
int main()
{
A a{ 0 };
reinterpret_cast<int>(a); // error : reinterpret_cast from 'A' to 'int' is not allowed
}
Run Code Online (Sandbox Code Playgroud)
为什么不像reinterpret_castC++标准那样表现?
我是Rust的新手,我一直在重新解决Project Euler的问题.问题是,我意识到我一直在构建整数类型(主要是i32- i64)以适应我的陈述; for iterators,in循环,函数输入,条件等等.这是正常的吗?
我猜我在使用PE的一次性功能以及主要来自动态类型语言时做错了.
我总是尝试使用尽可能小的(或最可行的)积分类型来解决问题,我觉得我应该只i64考虑所有事情并完成它而不是那么多.
哪个是更好/推荐的方法,毯i64式类型或合理的整数类型与代码中的转换?
编辑:在我想澄清的评论之后,这不是一个代码审查查询,而是关于最佳实践和可读性问题,因为这两个选项中的哪一个是首选.我认为,在循环中没有误用时,铸造对性能的影响可以忽略不计.
不相关的PS:我正在使用一系列素数因素做P4,结果是没有回文是两个4位数素数的产物,而两个3位素数的最大值是99899
我正在尝试将以下内容转换为整数,以便可以进行从123.456.789到的计算123456789。
但是,当我尝试
CAST([Total number] AS INT)
Run Code Online (Sandbox Code Playgroud)
要么
CONVERT(int, [Total number])
Run Code Online (Sandbox Code Playgroud)
然后我得到一个错误
将varchar值'123.456.789'转换为数据类型int时,转换失败。
有什么方法可以转换ifstream成一个istream?我有一个函数调用getToken(istream* br),接受一个istream作为参数,但在我main()使用an ifstream来读取文件,我必须使用它ifstream来调用getToken.我怎样才能克服这个问题?
我想在perl中可以从散列中获取数组引用或将ref散列转换为ref数组!
例如 :
%trad = ('January','Jan','February','Feb');
$ref = \%trad; # made a reference on hash
$ref2 = [%{$ref}]; # convert ref hash to ref array
Run Code Online (Sandbox Code Playgroud)
以其他方式我们可以写:
$ref2 = [%{\%trad}];
Run Code Online (Sandbox Code Playgroud)
但是这段代码是散列上的ref数组的错觉,因为contruction $ ref = [...]创建了一个对通过Perl复制哈希元素而创建的匿名数组的引用.
您可以通过尝试填充$ ref2指向的数组来查看,这对哈希没有影响!
有没有办法直接在内存区域直接操作哈希,使用真正的引用数组,如C中的cast方法!
在互联网上,我发现了以下问题:
int a = (int)pow(2, 32);
cout << a;
Run Code Online (Sandbox Code Playgroud)
它在屏幕上打印什么?
首先我想到了0,但是在我编写代码并执行它之后,我得到了-2147483648,但为什么呢?
我也注意到了(int)(pow(2, 32) - pow(2, 31))等于-2147483648.
谁能解释为什么(int)pow(2, 32)等于-2147483648?
我有这样的代码:
const quint8* data[2];
const float *p0 = (float*)data[0]
Run Code Online (Sandbox Code Playgroud)
在QtCreator中,我收到警告:
"使用旧式演员".
我试着像这样写:
const float *p0 = const_cast<float*>(data[0])
Run Code Online (Sandbox Code Playgroud)
但我得到的另一个错误是类型之间无法生成.
什么应该是正确的语法?
我使用STB库将图像加载到内存中.特定函数stbi_load返回指向a的指针unsigned char,该指针是一个数组.
我很想将新的C++ 17 API用于原始数据,std::byte这将使我更具表现力,让我逐个像素地对原始数据进行别名,或者通过将其转换为不同的数据类型来逐个颜色(不同大小的整数).
现在我尝试了这个:
std::unique_ptr<std::byte[], stbi_deleter>(stbi_load(...));
Run Code Online (Sandbox Code Playgroud)
当然,由于缺乏隐式转换,它不起作用.
然后我尝试了:
std::unique_ptr<std::byte[], stbi_deleter>(
static_cast<std::byte*>(stbi_load(...))
);
Run Code Online (Sandbox Code Playgroud)
同样,它仍然没有奏效.我不得不决定使用reinterpret_cast.并让我怀疑这种转换是否合法.我unsigned char*可以std::byte* 根据严格的别名规则合法地转换为?然后我可以将数据转换为另一种数据类型std::uint32_t*并进行变异吗?这会破坏别名规则吗?
如果我有一个指向char*s数组的指针,换句话说,一个名为p1的char**,如果我这样做(char*)p1我会得到什么?我猜测会有一些精度损失.我会丢失哪些信息,以及p1现在指向的是什么?谢谢!