我正在阅读ROS的代码。
在文件中ros_comm/roscpp/include/ros/subscriber.h,我看到了这样的一段代码:
operator void*() const { return (impl_ && impl_->isValid()) ? (void*)1 : (void*)0; }
Run Code Online (Sandbox Code Playgroud)
好吧,(void *)0可以看作是NULLC语言,但这(void *)1意味着什么呢?
如果一个类Foo包含此函数,则意味着我们可以这样编写代码:
Foo foo;
void *ptr = foo;
Run Code Online (Sandbox Code Playgroud)
对?那么这是否意味着void *ptr = (void *)1可能?这是什么意思?
我和Julia一起在朱诺工作.
我不知道朱莉娅是否支持OOP.
例如,是否有类似class或structC++的?
如何使用数据或函数等成员声明它?
我知道这i=i++;是一个未定义的行为,因为i在序列点之前更改了两次;.
但我不知道编译器是否保证这种情况,如下所示不是一个未定义的行为:
int func(int &i)
{
i++;
return i;
}
int i = 1;
i = func(i);
Run Code Online (Sandbox Code Playgroud) 我创建了一个cpp项目,它使用了一个名为的lib文件:libblpapi3_64.so
这个文件来自一个我从Internet上下载的库.
我的项目运行没有任何错误.所以我将它更新为bitbucket.然后我的同事下载并在自己的计算机上运行它.但他得到一个错误:
usr/bin/ld: cannot find -lblpapi3_64.
实际上,我已将其复制到我的项目存储库中.我的意思是我在我的项目下创建了一个名为lib的文件,我使用的所有lib文件都在其中.
还有其他的lib文件liblog4cpp.a,但它们都很好.只有libblpapi3_64.so得到错误.
是因为它是.so文件不是.a文件吗?还是有其他原因?
顺便说一句,libblpapi3_64.sois 的文件名green和其他文件(.a)是white.我认为这不是一个链接文件,它是原始文件.
我正在尝试创建一个julia语言包并在项目中使用它.
现在我只有一个jl文件,我不知道如何用它创建一个包.
我已阅读此链接,但我仍然不知道该怎么做.我想创建一个带有jl文件的本地包,并使用以下代码在我自己的本地项目中使用它:using MyPackage.
有人能帮助我吗?
朱莉娅是否像java一样支持反射?
我需要的是这样的:
str = ARGS[1] # str is a string
# invoke the function str()
Run Code Online (Sandbox Code Playgroud) 我只知道std::enable_shared_from_this形成这个链接.
但在阅读下面的代码后,我不知道何时使用它.
try {
Good not_so_good;
std::shared_ptr<Good> gp1 = not_so_good.getptr();
} catch(std::bad_weak_ptr& e) {
// undefined behavior (until C++17) and std::bad_weak_ptr thrown (since C++17)
std::cout << e.what() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
上面的代码"不太好",因为shared_ptr在调用之前没有存在getptr().好的应该是:
std::shared_ptr<Good> gp1 = std::make_shared<Good>(); // having a shared_ptr at the beginning
std::shared_ptr<Good> gp2 = gp1->getptr();
Run Code Online (Sandbox Code Playgroud)
但是,如果我已经有了一个shared_ptr对象,为什么我不只是简单地编码:std::shared_ptr<Good> gp2 = gp1;这意味着我根本不需要std::enable_shared_from_this.
在我看来,使用std::enable_shared_from_this是确保多个shared_ptr对象具有相同的控制块,以便我们可以避免双删除问题.但是如果我必须提醒自己shared_ptr在开始时创建一个,为什么我不提醒自己使用shared_ptrobject来创建一个新的,而不是使用原始指针?
在我的C项目中,有一个由另一位同事创建的结构,包含一些函数指针:
struct tools {
int (*tool_a) (int, int, int);
...
};
Run Code Online (Sandbox Code Playgroud)
我无权更改此结构和相关文件.
现在我用结构编码.
我必须定义一个函数,其返回类型和参数列表必须与tools.tool_a.
这意味着我的功能必须如下:
int my_func(int, int, int);
Run Code Online (Sandbox Code Playgroud)
问题是结构变化很大,特别是返回类型,例如今天int被替换size_t,所以我必须经常更改我的代码.
我知道decltype在C++中可以帮助我所以我只想知道C是否有相同的东西?
我想我可能会使用宏但我不知道如何,我甚至不知道它是否可能.
我正在用C开发一些用于Linux内核的测试工具
.我公司的其他组有很多版本的自定义内核.由于历史原因,其中一些使用int,其他使用size_t或ssize_t等等.
现在当我编码时,我必须这样做:
// int my_func(int a, int b, int c)
size_t my_func(int a, int b, int c)
// ssize_t my_func(int a, int b, int c)
{}
struct tools my_tool = {
.tool_a = my_func;
}
Run Code Online (Sandbox Code Playgroud)
我必须继续评论和取消评论......
我正在阅读java源代码,我发现如下:http:
//www.java2s.com/Code/JavaAPI/java.util/newTreeSetEComparatorsuperEc.htm
我不明白为什么这个构造函数的参数是<? super E>.
正如我的理解,应该是<? extend E>代替<? super E>,因为如果E是可比的,E的儿童必须在可比,而E的父母可能不.
我是 Golang 的新手,我正在尝试使用Gin在 Ubuntu 16.04 上开发 Web 服务器。
执行后go get -u github.com/gin-gonic/gin,会出现很多文件夹~/go/pkg/mod/github.com/。
然后我试着举个例子:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
Run Code Online (Sandbox Code Playgroud)
但是,go run example.go犯了错误:
example.go:3:8: cannot find package "github.com/gin-gonic/gin" in any of:
/usr/local/go/src/github.com/gin-gonic/gin (from $GOROOT)
/home/zyh/go/src/github.com/gin-gonic/gin (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
在我的系统中,$GOROOTis/usr/local/go/和$GOPATHis ~/go/。
我怎么能解决这个问题?