小编Max*_*xpm的帖子

返回引用的Const方法

class Foo
{
    int Bar;

    public:

    int& GetBar() const
    {
        return Bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

GetBar是一种const方法吗?它实际上并没有改变任何东西,但它为"外部世界"提供了一种改变它的方法.

c++ methods const class

15
推荐指数
1
解决办法
1万
查看次数

怎么做ncurses等.人.工作?

有几个像ncurses这样的库可以帮助制作命令行GUI.

简单地说,它们是如何工作的?

我的第一个想法是ncurses拦截所有键盘输入,并通过逐行输出来绘制每个"帧".然而,仔细检查发现每个新框架都会覆盖前一个框架.它如何修改已经输出的行?此外,它如何处理颜色?

编辑:同样的问题适用于任何具有"花哨"界面的东西,比如vimemacs.

user-interface command-line internals ncurses

15
推荐指数
2
解决办法
3861
查看次数

隐式模板参数

以下代码在Xcode中生成编译错误:

template <typename T>
struct Foo
{
    Foo(T Value)
    {
    }
};

int main()
{
    Foo MyFoo(123);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

error: missing template arguments before 'MyFoo'

更改Foo MyFoo(123);Foo<int> MyFoo(123);修复问题,但编译器是否应该能够找出相应的数据类型?

这是一个编译器错误,还是我误解了隐式模板参数?

c++ xcode templates implicit

13
推荐指数
2
解决办法
6965
查看次数

异步上下文管理器是否需要保护它们的清理代码不被取消?

问题(我认为)

contextlib.asynccontextmanager文档给出了这样的例子:

@asynccontextmanager
async def get_connection():
    conn = await acquire_db_connection()
    try:
        yield conn
    finally:
        await release_db_connection(conn)
Run Code Online (Sandbox Code Playgroud)

在我看来,这可能会泄漏资源。如果此代码的任务在此代码在其行上时被取消await release_db_connection(conn),则发布可能会中断。在asyncio.CancelledError将从某处内向上传播finally块,从而防止随后的清理代码运行。

因此,实际上,如果您正在实现一个处理超时请求的 Web 服务器,则在完全错误的时间触发超时可能会导致数据库连接泄漏。

完整的可运行示例

import asyncio
from contextlib import asynccontextmanager

async def acquire_db_connection():
    await asyncio.sleep(1)
    print("Acquired database connection.")
    return "<fake connection object>"

async def release_db_connection(conn):
    await asyncio.sleep(1)
    print("Released database connection.")

@asynccontextmanager
async def get_connection():
    conn = await acquire_db_connection()
    try:
        yield conn
    finally:
        await release_db_connection(conn)

async def do_stuff_with_connection():
    async with get_connection() as conn:
        await …
Run Code Online (Sandbox Code Playgroud)

python resource-cleanup resource-leak cancellation python-asyncio

13
推荐指数
1
解决办法
231
查看次数

库中的"lib"前缀

来自http://www.adp-gmbh.ch/cpp/gcc/create_lib.html:

注意:库必须以三个字母开头lib并具有后缀.a.

这是一个操作系统约定,还是gcc/ arquirk?Xcode似乎能够创建没有前缀的库.它有什么不同的做法?

c c++ gcc naming-conventions

12
推荐指数
1
解决办法
4438
查看次数

为什么模块在文件中明确命名?

D语言参考:

模块与源文件一一对应.模块名称是文件名,其路径和扩展名被剥离.

但是,模块名称仍然在文件中明确指定.

module foo;
Run Code Online (Sandbox Code Playgroud)

这有什么意义?如果模块对应于文件,为什么编译器不能从文件名中推断出它们的调用?

compiler-construction d language-design design-rationale

12
推荐指数
1
解决办法
263
查看次数

C++程序中的形状

如果我没记错的话,我看到了一些不道德的C++库,它允许你在C++程序中输入ASCII-art形状并将它们视为对象.像这样的东西:

int area = someFreakyClass(o-----o
                           |     |
                           o-----o).area();
Run Code Online (Sandbox Code Playgroud)

这个图书馆叫什么?

c++

11
推荐指数
2
解决办法
944
查看次数

递归有什么好处?

可能重复:
递归还是迭代?

迭代是人,是递归神圣. - L. Peter Deutsch

为什么人们喜欢递归而不是迭代,甚至可以称之为神圣,如引用中所示?它似乎过度炒作了.据我所知,递归代码更难以掌握,因此维护.此外,如果编译器未进行优化,则会冒着堆栈溢出的风险.

language-agnostic iteration recursion

11
推荐指数
0
解决办法
616
查看次数

我如何使用type_info进行类型转换?

我已经存储了一个指向type_info对象的指针.

int MyVariable = 123;
const std::type_info* Datatype = &typeid(MyVariable);
Run Code Online (Sandbox Code Playgroud)

我如何使用它来将另一个变量强制转换为该类型?我试过这个,但它不起作用:

std::cout << ((*Datatype)3.14) << std::endl;
Run Code Online (Sandbox Code Playgroud)

使用类型转换的函数形式不起作用:

std::cout << (*Datatype(3.14)) << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ casting rtti

10
推荐指数
2
解决办法
9352
查看次数

重载operator =作为非成员

根据对这个帖子的回复,operator=不能作为非成员函数重载.因此,例如,以下内容使编译器非常生气:

class MyClass
{
    // ...
};

MyClass& operator=(MyClass& Left, MyClass& Right)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我有一个带getter和setter的容器类,因此不需要成员函数,它会破坏封装.上述线程的答案之一是说确保"L值被接收为其第一个操作数",但我不完全理解这意味着什么.有人可以澄清一下吗?

此外,有operator=,operator(),operator[]operator->"古怪"的情况下......?或者我应该将所有重载的运算符实现为成员函数......?(我知道不这样做是完全合法的,但我正在寻找更好的做法.)

c++ oop encapsulation operator-overloading assignment-operator

10
推荐指数
1
解决办法
4897
查看次数