我有一个文章列表,每篇文章都有自己的标题和描述.不幸的是,从我使用的来源,没有办法知道他们写的是什么语言.
此外,该文本并非完全用一种语言书写; 几乎总是英语单词存在.
我估计我需要存储在我的机器上的字典数据库,但感觉有点不切实际.你有什么建议我这样做?
是否有适用于一元和运营商的特殊规则?
例如,代码:
#include <iostream>
struct X
{
X() {}
void* operator &() { return NULL; }
};
int main()
{
const X x;
std::cout << &x << std::endl;
X y;
std::cout << &y;
}
Run Code Online (Sandbox Code Playgroud)
产生输出
0xbfbccb33
0
Run Code Online (Sandbox Code Playgroud)
我知道这会像这样编译和运行,因为之前我曾在这里进行过讨论,但我不知道这一点,我原本预计这会无法编译,因为operator &没有声明const.
因此,operator &() const无论是否operator &()过载,编译器似乎都会生成.很好,这很有意义,尤其是样本和输出.
问题是标准中详细说明了这种行为在哪里?
我不是在寻找重复我在问题中已经说明的答案的答案,所以请不要解释我的重载操作符是如何在一个const对象上调用的,因为我已经知道了.
我想问一下C++中的指针
我有一些简单的代码:
int add(int a, int b){
return a+b;
}
int runner(int x,int y, int (*functocall)(int, int)){
return (*functocall)(x,y);
}
Run Code Online (Sandbox Code Playgroud)
现在,假设我使用这种方式调用这些函数:
cout<<runner(2,5,&add);
Run Code Online (Sandbox Code Playgroud)
或者可能
cout<<runner(2,5,add);
Run Code Online (Sandbox Code Playgroud)
有什么不同吗?因为当我尝试时,结果是相同的,没有错误.
非常感谢
我偶然发现了一个我最初无法解释的奇怪行为(见ideone):
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::cout << "Reference : "
<< (void const*)"some data"
<< "\n";
std::ostringstream s;
s << "some data";
std::cout << "Regular Syntax: " << s.str() << "\n";
std::ostringstream s2;
std::cout << "Semi inline : "
<< static_cast<std::ostringstream&>(s2 << "some data").str()
<< "\n";
std::cout << "Inline : "
<< dynamic_cast<std::ostringstream&>(
std::ostringstream() << "some data"
).str()
<< "\n";
}
Run Code Online (Sandbox Code Playgroud)
给出输出:
Reference : 0x804a03d
Regular Syntax: some data
Semi inline : some …Run Code Online (Sandbox Code Playgroud) 以下代码编译并运行,并且gcc或clang不会发出警告:
#include <iostream>
struct Base {
virtual ~Base() = default;
virtual std::string const& get() = 0;
};
struct Derived: Base {
virtual std::string& get() override { return m; }
std::string m;
};
int main()
{
Derived d;
d.get() = "Hello, World";
Base& b = d;
std::cout << b.get() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
是std::string&协变带std::string const&呢?
当一个类使用getter访问自己的成员数据时,我个人觉得它很奇怪/丑陋.我知道性能影响是没有但我只是不喜欢看到所有这些方法调用.是否有任何强有力的论据,或者它只是个人喜好的东西之一,应留给每个编码人员,还是在编码标准中任意控制?
更新:我的意思是简单的吸气剂,特别是对于一个班级的非公共成员.
我有一段文字,字符长度不同.
let text = "Hello ??????";
Run Code Online (Sandbox Code Playgroud)
给定开始(包含)和结束(排除)字符索引时,我需要获取一小段字符串.我试过这个
let slice = &text[start..end];
Run Code Online (Sandbox Code Playgroud)
并得到以下错误
thread 'main' panicked at 'byte index 7 is not a char boundary; it is inside '?' (bytes 6..8) of `Hello ??????`'
Run Code Online (Sandbox Code Playgroud)
我想这是因为西里尔字母是多字节的,并且[..]符号使用字节索引来表示字符.如果我想使用字符索引切片,我可以使用什么,就像我在Python中做的那样:
slice = text[start:end] ?
我知道我可以使用chars()迭代器并手动遍历所需的子字符串,但是有更简洁的方法吗?
环境:linux x64,编译器gcc 4.x
项目有以下结构:
static library "slib"
-- inside this library, there is static object "sobj"
dynamic library "dlib"
-- links statically "slib"
executable "exe":
-- links "slib" statically
-- links "dlib" dynamically
Run Code Online (Sandbox Code Playgroud)
在节目结束时,"sobj"被毁坏两次.这种行为是预期的,但是它在相同的内存地址被破坏了两次,即在析构函数中也是"this" - 因此存在双重破坏问题.我认为这是由于一些符号重叠.
这场冲突的解决方案是什么?也许一些链接选项?
这是测试用例:
main_exe.cpp
#include <cstdlib>
#include "static_lib.h"
#include "dynamic_lib.h"
int main(int argc, char *argv[])
{
stat_useStatic();
din_useStatic();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
static_lib.h
#ifndef STATIC_LIB_H
#define STATIC_LIB_H
#include <cstdio>
void stat_useStatic();
struct CTest
{
CTest(): status(isAlive)
{
printf("CTest() this=%d\n",this);
}
~CTest()
{
printf("~CTest() this=%d, %s\n",this,status==isAlive?"is Alive":"is …Run Code Online (Sandbox Code Playgroud) 这是我想知道的一些问题.鉴于以下代码,我们可以确定其输出吗?
void f() {
int i = 0;
z: if(i == 1) goto x; else goto u;
int a;
x: if(a == 10) goto y;
u: a = 10; i = 1; goto z;
y: std::cout << "finished: " << a;
}
Run Code Online (Sandbox Code Playgroud)
这是否保证finished: 10根据C++标准输出?或者编译器可以占用a存储到的寄存器,何时goto到达之前的位置a?
到目前为止,我认为在产生它的声明的评估结束时,临时性被破坏了.
但是,当使用临时初始化a的字段时,似乎存在异常struct.
PeterHall帮助提供了一个简单的代码示例,说明评论与他的答案的区别,我简化了一点:
struct Wrapper<'a> {
cmd: &'a Cmd<'a>,
}
struct Cmd<'a> {
args: &'a Option<String>,
}
impl <'a> Cmd<'a> {
fn new(args: &'a Option<String>) -> Cmd<'a> {
Cmd {
args: args,
}
}
}
pub fn main() {
// OK
let cmd = Cmd {
args: &None,
};
// OK
let cmd = Wrapper {
cmd: &Cmd {
args: &None,
}
};
// Lifetime error
let cmd = Some(Cmd { …Run Code Online (Sandbox Code Playgroud)