小编Mir*_*pas的帖子

如何在Mac上获取最新SDK的路径

我知道为了从命令行获取xcode安装目录,我必须使用xcode-select -print-path.结果如下:/Applications/Xcode.app/Contents/Developer

是否有任何命令来获取最新的SDK文件夹?我需要结果如下:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/

如果无法获得SDK完整路径,我至少需要SDK编号,我将尝试构建路径.

macos xcode

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

std :: list - 移动时失效的迭代器是什么?

std::list迭代器有一些非常好的属性 - 当删除任何其他元素,添加新元素时,甚至当交换2个列表时,它们仍然有效(迭代器失效规则)!

考虑以下代码行为并且迭代器是通过指向实际节点的指针的形式实现的,当移动列表时,该指针不会改变,我猜测迭代器在std::list移动a时在新容器中仍然有效,而且我可以通过访问实际具有"预期"值的无效内存进入UB区域.

std::list<int> l1{3, 2, 1};
std::list<int> l2;

auto it = std::prev(l1.end());
std::cout<<l1.size()<<" "<<l2.size()<<" "<<*it<<std::endl;

l2 = std::move(l1);
std::cout<<l2.size()<<" "<<*it<<std::endl;

3 0 1
3 1
Run Code Online (Sandbox Code Playgroud)

如果std::list移动时迭代器保持有效,它是否由标准保证?其他容器怎么样?

c++ c++11 c++14

11
推荐指数
1
解决办法
764
查看次数

std :: unordered_map指针/引用失效

我有以下代码:

std::unordered_map<std::string, std::string> map;

map["k1"] = "v1";
auto& v1 = map["k1"];
map["k2"] = "v2";
Run Code Online (Sandbox Code Playgroud)

阅读http://en.cppreference.com/w/cpp/container/unordered_map后

笔记

交换函数不会使容器内的任何迭代器无效,但它们会使标记交换区域末尾的迭代器无效.

存储在容器中的键或数据的引用和指针只有通过擦除该元素才会失效,即使相应的迭代器无效也是如此.

v1即使在插入过程中可能发生重新散列,看起来在插入新值后也可以安全使用.

我对这句话的解释是否正确?我可以在修改地图后使用地图中值的引用/指针(显然擦除值本身会使引用/指针无效)?

c++ unordered-map language-lawyer c++11

11
推荐指数
1
解决办法
3411
查看次数

如何在不调整大小的情况下从std :: vector中删除元素

迭代器擦除(迭代器位置);

迭代器擦除(迭代器优先,迭代器最后);

擦除元素从向量容器中移除单个元素(位置)或一系列元素([first,last)).

这有效地减少了矢量大小,删除了元素的数量,之前调用每个元素的析构函数.

和:

去掉

从[first,last]定义的范围中移除所有等于给定值的元素.通过移动范围中的元素以便覆盖所需元素来完成移除.范围的旧端和新端之间的元素保持不变.返回到范围的新结尾的迭代器.

有没有办法从迭代器范围内的std :: vector中删除元素(类似于remove,但是[first,last]中的所有元素)而不调整向量的大小?我需要保持它在运行时达到的最大大小以防止重新分配.

谢谢!

c++ stl

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

C#SaveFileDialog在特定文件夹中

SaveFileDialog用来选择我想要保存文件的路径.我设置InitialDirectory为某个文件夹,但我想将保存位置限制为该文件夹或该文件夹的子文件夹.这可能吗?

SaveFileDialog dialog = new SaveFileDialog();
dialog.InitialDirectory = "SomePath"//this is the path that I want to be root folder
Run Code Online (Sandbox Code Playgroud)

c# savefiledialog

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

在C++中创建静态全局变量时

我知道全局变量是按相同编译单元的声明顺序创建的,并且未在多个编译单元之间定义创建顺序.

我前段时间读过,全局变量是在调用定义它们的编译单元中的任何代码之前创建的.这是由标准定义的吗?

例:

file1.cpp

int f1v1 = f1_1();
int f1v2 = f1_2();

void f1(){...}

int f1_1(){...}
int f1_2(){...}
Run Code Online (Sandbox Code Playgroud)

file2.cpp

static int f2v1 = f2_1();
static int f2v2 = f2_2();

int f2_1(){...}
int f2_2(){...}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "file1.h"
#include "file2.h"

int main()
{
    f1();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,f1_1()是否由之前f1_2()和之前调用的标准保证f1()?由标准,保证f2_1()f2_2()被称为可言,因为没有在file2.cpp定义的函数被调用,f2v1并且f2v2是不可见的外file2.cpp?

编辑:

当在lib1中编译file1.cpp并且在lib2中编译file2.cpp时,标准是否指定了行为?

c++ language-lawyer

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

自动更改C++中的内部类型可见性?

我有这个简单的代码:

#include <vector>

class A
{
    private:
        struct B{int x;};
    public:
        std::vector<B> v;
};

int main()
{
    A a;

    for (std::vector<A::B>::iterator it = a.v.begin(); it != a.v.end(); ++it)
    {
        it->x = 0;
    }
    for (auto it = a.v.begin(); it != a.v.end(); ++it)
    {
        it->x = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我在第一个for循环中构建了错误--A :: B是私有的,但是第二个for循环在Visual Studio 2010,2012和2013中编译得很好.这是正常行为还是编译器中的错误?

c++ c++11

10
推荐指数
0
解决办法
109
查看次数

无法启动调试器.必需属性"LocalDebuggerWorkingDirectory"缺失或为空

当我尝试启动应用程序时,我在标题中写了错误.我用谷歌搜索,但没有找到任何带有'LocalDebuggerWorkingDirectory'关键字的页面.该解决方案包含c#和c ++项目的混合,它工作正常,直到今天...我使用Windows 7和Visual Studio 2010.你知道我在哪里可以找到这个属性来改变它或我如何添加它?

visual-studio-2010

9
推荐指数
1
解决办法
9738
查看次数

lua脚本错误检查

是否有可能检查lua脚本是否包含错误而不执行它?我有以下代码:


    if(luaL_loadbuffer(L, data, size, name))
    {
        fprintf (stderr, "%s", lua_tostring (L, -1));
        lua_pop (L, 1);
    }

    if(lua_pcall(L, 0, 0, 0))
    {
        fprintf (stderr, "%s", lua_tostring (L, -1));
        lua_pop (L, 1);
    }
Run Code Online (Sandbox Code Playgroud)

但是如果脚本包含错误,则它会先执行,然后执行.我想知道它在加载时是否包含错误,而不是在我执行它时.这可能吗?

lua

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

如何在C++中实现Observer模式

我有一个动画类.我需要有一些观察员Play,PauseStop在动画的事件.我找到了2个解决这个问题的方法,但我不知道该选择什么.

  1. 使用boost :: signals或类似的东西,并为每个事件注册回调

  2. 使用3个纯虚函数(OnPlay(),)创建一个简单的接口OnPause(),OnStop()并传递给实现此接口的Animation类对象.

每种方法都有优点和缺点.我将尝试列举到目前为止我发现的那些:

优点1.

  • 我可以使用任何成员函数/自由函数作为回调
  • 如果我不关心所有这些功能,我不必实现所有3个功能
  • 相同的对象可以用作多个动画的观察者,而无需从Animation类传递额外的参数

缺点1.

  • 我必须为每个回调创建一个可调用对象
  • 如果我想稍后添加一个新事件,将很难找到它所使用的位置(编译器无法强制我实现或忽略新事件).
  • 不知何故奇怪的语法(我必须使用std :: bind/boost :: bind无处不在).

优点2.

  • 易于理解的结构
  • 如果我将在Animation/Observer接口类中添加一个新事件,编译器将强制我实现(可能为空)新函数.

2的缺点.

  • 即使我只使用一个函数,我也必须实现3个函数
  • 如果不从动画(ID或其他内容)发送一些额外参数,则不能将相同对象用作不同动画的观察者.
  • 无法使用免费功能.

你能告诉我用什么吗?根据您的经验,对于这个问题有什么好处 - 从第一个方面获得免费或从第二个方面清晰易懂的代码?您能否告诉我这两种方法或其他解决方案的其他优点/缺点?

c++ design-patterns c++11

9
推荐指数
1
解决办法
884
查看次数