小编Wea*_*ish的帖子

使用VS2015 Update 1编译时表达式破坏代码

在我的机器上安装Visual Studio 2015 Update 1之后,我看到我的一些单元测试失败了.在做了一些调查后,我能够将问题减少到这行代码:

Expression<Func<GameObject, bool>> expression = t => t.X == 0 && t.Y == 0 && t.GameObjectType == GameObjectType.WindMill;
Run Code Online (Sandbox Code Playgroud)

将鼠标悬停在表达式变量上时,Visual Studio版本中的结果会有所不同:

VS 2015: VS 2015

VS 2015 Update 1: VS 2015 Update 1

正在对枚举进行比较的逻辑(ServiceStack.OrmLite代码中的某个地方)现在采取了不同的行为,最终导致枚举不被识别为枚举,从而导致单元测试失败.

我能够使用以下代码重现该问题:

class Program
{
    static void Main(string[] args)
    {
        var gameObjects = new List<GameObject> {
            new GameObject { X = 0, Y = 0, GameObjectType = GameObjectType.WindMill },
            new GameObject { X = 0, Y = 1, GameObjectType = GameObjectType.Pipe },
            new GameObject { X = 0, Y = …
Run Code Online (Sandbox Code Playgroud)

.net c# expression-trees visual-studio-2015 .net-4.6

21
推荐指数
1
解决办法
635
查看次数

数组元素是否算作常见的初始序列?

我之前的问题相关的排序:

数组元素是否算作一个常见的初始序列?

struct arr4 { int arr[4]; };
struct arr2 { int arr[2]; };

union U
{
    arr4 _arr4;
    arr2 _arr2;
};

U u;
u._arr4.arr[0] = 0; //write to active
u._arr2.arr[0]; //read from inactive
Run Code Online (Sandbox Code Playgroud)

根据这个cppreference页面:

在具有非联合类类型T1的活动成员的标准布局并集中,允许读取非联合类类型T2的另一个联合成员的非静态数据成员m,前提是m是公共初始序列的一部分T1和T2 ......

这是合法的,还是非法类型的惩罚?

c++ arrays unions language-lawyer

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

如何调用从先前执行中保存的函数指针失败?

我很好奇,如果函数指针可以存储在一个文件中,并在程序退出并重新启动的某个未来时间点使用.例如,我的第一个测试程序看起来像这个伪代码:

void f(){}

typedef void(*Fptr)();

int main() {
    int i;
    cin >> i;
    if (i == 1) {
        std::ofstream out(/**/);
        out << &f;
    }
    else {
        std::ifstream in(/**/);
        Fptr fp;
        in >> fp;
        fp();
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是我想要做的逻辑.我会用输入启动它1,让它退出,然后用输入再次运行它2.不要认为这是我的真实代码,因为我删除了原始测试,因为......

只有在我不更改可执行文件所在的目录时才有效!

将新文件添加到目录(可能是删除文件)并将可执行文件移动到新位置都会导致fp();崩溃.新函数地址将是不同的值.

所以我做了一个新的测试,计算旧函数指针和当前函数地址之间的差异.将该偏移量应用于旧函数指针并调用它会产生正确的函数调用,无论我对目录执行什么操作.

我相信这是UB.但是,像取消引用空指针一样会导致段错误,UB非常一致.

除了用垃圾重写数据,并假设函数没有加载到DLL中,这种方法有多大可能成功?它会以什么方式失效?

c++ undefined-behavior

8
推荐指数
1
解决办法
225
查看次数

右移运算符用作模板参数时的语法错误

如果我获取右移位运算符的地址并将其作为模板参数传递,则右移位符号被误读为模板参数列表的末尾,由此产生的混淆导致多个错误.

template <class T, void(T::*)(int)> struct TemplateMagic {};
struct TestStruct { void operator>> (int) {} };

int main() {
//All the errors are on this line:
    TemplateMagic<TestStruct, &TestStruct::operator>> >* ptr; 
}
Run Code Online (Sandbox Code Playgroud)

Microsoft Visual Studio Express 2013 for Windows桌面版本12.0.31101.00 Update 4中运行此操作会出现以下错误:

错误C2143:语法错误:缺少';' 在'>'之前

错误C2275:'TestStruct':非法使用此类型作为表达式

错误C2833:'operator>'不是可识别的运算符或类型

据我所知,operator>> >符号被分开,因此它将其读作operator>,然后是终止>以关闭模板参数,并以>lulz 的备用结束.我认为这是一个错误.

有没有办法改写这个,以便它被认为是有效的?

c++ templates syntax-error

5
推荐指数
1
解决办法
195
查看次数

如何为可变参数模板使用“using”关键字

我有一个可变参数模板类,它可以在构造函数中使用任意数量的变量,还有 astd::tuple/std::pair等等。

我想将此包装器用于具有不同返回类型的函数。

例如:

class f1
{
    using output = double;
    output operator() { do_smth };
}
class f2
{
    using output = std::tuple<double,int>;
    output operator() { do_smth };
}



template <typename... Types>
class OutputType
{
    std::tuple<Types...> m_val;
public:
    OutputType(std::tuple<Types...>&& val) : m_val(val) {};
    OutputType(Types&& ... val) : m_val(std::forward<Types>(Types)...) {};
};
Run Code Online (Sandbox Code Playgroud)

现在在第三堂课中,我想像这样声明使用:

template <typename F>
class dummy
{
    using Output = typename OutputType(typename F::Output));
}
Run Code Online (Sandbox Code Playgroud)

我如何声明上面的 using 语句,以便它也为 做正确的事情dummy<f2>

(即OutputType<double,int>而不是OutputType<std::tuple<double,int>>

c++ variadic-templates c++11

4
推荐指数
1
解决办法
1101
查看次数

从NEST调度Index()到Elasticsearch.NET失败

client.Index使用Nest和Elasticsearch.NET 时调用时出错

var httpConnection = new AwsHttpConnection(new AwsSettings
{
    AccessKey = "AKIAIFIV4LN6XZAFVX7Q",
    SecretKey = "MySecretKey",
    Region = "us-east-1",
});

var pool = new SingleNodeConnectionPool(new Uri(sSearchURI));
var config = new ConnectionSettings(pool, httpConnection);
var client = new ElasticClient(config);
var person = new Person
{
    Id = "1",
    Firstname = "Martijn",
    Lastname = "Laarman"
};
var index = client.Index(person);
Run Code Online (Sandbox Code Playgroud)

从NEST调度Index()到Elasticsearch.NET失败
接收标记为PUT的请求此端点接受POST,PUT请求可能没有提供足够的信息来生成任何这些端点:
- /{index}/{type}
- /{索引}/{类型}/{ID}

任何的想法?

c# elasticsearch nest

2
推荐指数
1
解决办法
1071
查看次数

如何更改地图容器的内部排序方案?

我是一个初学者C++程序员,所以有语言结构,我不明白这使我从认识的地图的API(供您参考,在这里)

更重要的是,一些问题:

如何更改map的内部排序方案,以便在我们使用的情况下map::<string, ...>,键值按字母顺序排序?

更具体地说map::key_comp,它是一个定义和遗忘的东西,一旦我们定义了相同类型的两个元素"不等(一个小于另一个)"意味着什么,那么排序是内部和自动完成的 - 所以我们需要插入键/值对?或者我们必须定义相等/排序然后显式调用函数返回一个布尔来实现有序插入?

c++ containers dictionary

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

如何将int转换为字符串

我有以下c ++函数,我想知道如何将inta 转换为a 语句stringelse子句if.

string afficherValeurNominal(int val)
{
    string valAffiche = "";
    if (val == 11) // carte j
    {
        valAffiche = "V";
    }
    else if (val == 12) // carte Q
    {
        valAffiche = "D";
    }
    else if (val == 13) // carte k
    {
        valAffiche = "R";
    }
    else
    {
        valAffiche = val;
    }
    return valAffiche;
}
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么C数组声明为int arr []而不是int [] arr?

Java支持两者,为什么不C?

我认为int []arr更容易阅读.

有特殊原因吗?

c arrays

0
推荐指数
1
解决办法
137
查看次数

如何将除bools向量中的一个元素之外的所有元素设置为true?

我有一个vectorC++.

vector<bool> trumpIsGoodFor(42);
Run Code Online (Sandbox Code Playgroud)

我需要设置除第24个元素之外的所有元素true.

我想使用C++ 11/14使用一行/两行或优雅的作业来完成它.

c++ vector c++11

-3
推荐指数
1
解决办法
250
查看次数